大致思路是直接枚举a,b
但因为a,b过大所以把R(h,1)往回推,退出来一些小性质,然后再枚举,性质详见代码
不太清楚此做法的正确性及复杂度,有没有神仙分析一下或给组hack
附式子过程
R(h,1)=R(1,h)=R(hk∼2hk−1,h)
枚举k,在hk∼2hk−1中枚举g∗x
R(g∗x,h)=R(h,g∗x)=R(h∗(g∗x)k∼(h+1)∗(g∗x)k,h)
再盲猜有k=1符合条件
于是在h∗g∗x∼(h+1)∗g∗x中枚举g∗y,要求x,y互质
看起来这个做法就很假的样子,不过评测记录
#include<bits/stdc++.h>
using namespace std;
#define int long long
int gcd(int x,int y){
if(!y) return x;
return gcd(y,x%y);
}
signed main(){
int T;
cin>>T;
while(T--){
int x=1,g,h;
cin>>g>>h;
for(int k=1;;k++){
x*=h;
int l=(int)ceil(x*1.0/g),r=2*x/g,f=0;
if(l>=r) continue;
for(int j=l;j<r;j++){
for(int k=0;k<j;k++){
int y=h*j+k;
if(gcd(j,y)==1){
cout<<g*j<<' '<<g*y<<endl;
f=1;
break;
}
}
if(f) break;
}
if(f) break;
}
}
return 0;
}