8
1-n k的倍数 比k大 n/k下取整个 爆ll 大数
#include<bits/stdc++.h>
using namespace std;
#define maxn 100000
int ans[maxn],T,n,k;
string num;
bool isprime(int x){
for(int i=2;i<=sqrt(x);i++){
if(x%i==0)
return 0;
}
return 1;
}
string num_mul(string a,string b){
memset(ans,0,sizeof ans);
num.clear();
int lena=a.size();
int lenb=b.size();
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
for(int i=0;i<lena;i++){
for(int j=0;j<lenb;j++){ //b的每一位乘a的每一位
ans[i+j]+=(a[i]-'0')*(b[j]-'0');
}
}
int yu=0; //初始余数为0
int i;
int len=lena+lenb-1; //总长度
for(i=0;;i++){ //转化
if(i<len||yu!=0){ //小于总长或者还有余数时
yu=ans[i]+yu;
ans[i]=yu%10; //数值等于模十
yu=yu/10; //余数等于除十
}else break;
}
while(i--){
num+=ans[i]+'0';
}
return num;
}
string a,b;
int main(){
cin>>T;
while(T--){
cin>>n>>k;
int num=n/k;
string ans="1";
for(int i=2;i<=num;i++){
if(isprime(i))
ans=num_mul(ans,to_string(i));
}
cout<<num_mul(ans,to_string(k))<<endl;
}
return 0;
}
2
#include<bits/stdc++.h> //保证至少两个fi=0
using namespace std;
const int maxn=2e5+5;
typedef long long ll;
#define mp make_pair
#define fi first
#define se second
#define IO ios::sync_with_stdio(false);cin.tie(0);
ll n,m;
ll a[65],x[maxn],y[maxn],c[maxn];
string s[1005],ans,d[1005];
int main(){
IO;
map<char,int> mp;
map<int,char> mp2;
for(char i='a';i<='z';i++){
mp[i]=i-'a';
}
for(char i='A';i<='Z';i++){
mp[i]=i-'A'+26;
}
for(int i=0;i<=25;i++){
mp2[i]=(char)(i+'a');
}
for(int i=26;i<=51;i++){
mp2[i]=(char)(i-26+'A');
}
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>x[i]>>y[i];
}
for(int i=1;i<=n;i++){
cin>>s[i];
}
for(int i=m;i>=1;i--){
ans="";
ll lenx=s[x[i]].size(),leny=s[y[i]].size();
ll k=leny/lenx;
if(leny%lenx)
k++;
// cout<<k<<endl;
string key="";
for(int j=1;j<=k;j++){
key+=s[x[i]];
}
// cout<<key<<endl;
ll len=min((ll)key.size(),leny);
// cout<<len<<endl;
for(int j=0;j<len;j++){
c[j]=(mp[s[y[i]][j]]-mp[key[j]]+52)%52;
}
for(int j=0;j<len;j++){
s[y[i]][j]=mp2[c[j]];
}
// cout<<s[y[i]]<<endl;
}
for(int i=1;i<=n;i++){
cout<<s[i]<<endl;
}
return 0;
}