[C++] 纯文本查看 复制代码 #include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int>PII;
vector<int>num2,num5,all;
void init(){
num2.push_back(1);
num5.push_back(1);
for(;num5.back()*5<=1e9;){
num5.push_back(num5.back()*5);
}
for(;num2.back()*2<=1e9;){
num2.push_back(num2.back()*2);
}
for(auto i : num2){
for(auto j:num5){
if(i*j>1e9)continue;
all.push_back(i*j);
// cout<<i*j<<endl;
}
}
sort(all.begin(),all.end());
}
int exgcd(int a,int b,int &x,int &y){
if(!b){
x=1,y=0;
return a;
}else{
int d=exgcd(b,a%b,y,x);
//a*x1+b*y1=b*y+ax-a/b*bx
//a*x1+b*y1=ax+b(y-a/b*x)
//x1=x y1=y-a/b*x
y=y-(a/b)*x;
return d;
}
}
void solve(){
int a,b,c=1e18,d,m;
cin>>a>>b;
m=b;
while(m%2==0)m/=2;
while(m%5==0)m/=5;
if(m==1){
cout<<0<<" "<<1<<endl;
return ;
}
int k=b/m%m,inv_k,xm;
exgcd(k,m,inv_k,xm);
int lim_s=(int)1e9/m,s;
for(auto i : all){
if(i>lim_s)continue;
int c2=-a*i%m*inv_k%m;
c2=(c2+m)%m;
if(c>c2){
c=c2;
s=i;
}
}
cout<<c<<" "<<s*m<<endl;
}
signed main(){
int t=1;ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>t;
init();
while(t--)solve();
return 0;
} |