蒟蒻代码全部T掉
查看原帖
蒟蒻代码全部T掉
306560
kevinchw楼主2022/3/27 07:15
#define ll long long
#define ull unsigned long long
#define inf 2000000000
#define ldb long double
#define db double
#define ft float
#define myset(a,b,c,d) for(int i=b;i<=c;i++)a[i]=d;
using namespace std;

ll gcd(ll x,ll y)
{
	if(!y)return x;
	return gcd(y,x%y);
}
int main()
{
// 	freopen("math.in","r",stdin);
// 	freopen("math.out","w",stdout);
	int t;
	cin>>t;
	while(t--)
	{
		int x;ll z;
		scanf("%d%lld",&x,&z);
		if(z%x)
		{
			printf("-1\n");
			continue;
		}
		z/=x;
		int i;
		ll ans=-1;
		
		int kk=1;
		if(x%2)
		{
			kk++;
		}
		for(i=1;i*i<=x;i+=kk)if(x%i==0){
			int k=x/i;
			
			if(z%(k*k)==0)
			{
				if(gcd(x,z/(k*k))==1)
				{
					ans=z/k;
					break;
				}
			}
		}
		
		if(ans!=-1)
		{
			printf("%lld\n",ans);
			continue;
		}
		for(i=i-kk;i;i-=kk)if(x%i==0){
			if(z%(i*i)==0)
			{
				if(gcd(x,z/i)==i)
				{
					ans=z/i;
					break;
				}
			}
		}
		printf("%lld\n",ans);
	}
	return 0;
}```

2022/3/27 07:15
加载中...