大家好,我破防了!我写的程序民间70,官方75。
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
int main()
{
//freopen("math.in","r",stdin);
//freopen("math.out","w",stdout);
long long m,n,i,j,t,x,z,k,y,yy,f;
scanf("%lld",&t);
for(i=1;i<=t;i++)
{
scanf("%lld %lld",&x,&z);
y=((z/x)/__gcd(x,(z/x)));
if(x*y*__gcd(x,y)==z)
{
printf("%lld\n",y);
}
else
{
f=0;
for(j=2;j<=150;j++)
{
yy=y*j;
if(x*yy*__gcd(x,yy)==z)
{
printf("%lld\n",yy);
f=1;
break;
}
}
if(f==0) printf("-1\n");
}
}
return 0;
}
但是我同学的代码离谱得很,就是民间数据0分,之后官方全过!(虽然只是没判断是否合法)
#include<bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b)
{
return b == 0 ? a : gcd(b, a % b);
}
int main()
{
long long z, x;
int t;
cin>>t;
for(int i = 1; i <= t; i++)
{
cin>>x>>z;
long long ans;
if(z % x != 0)
{
cout<<-1<<endl;
continue;
}
ans = (z / x) / gcd(x, z / x);
ans *= sqrt((z / x / ans / gcd(x, ans)));
cout<<(long long)ans<<endl;
}
return 0;
}
CCF真就用脚造数据呗?(验证码4nmm祭!)