关于此种80pts做法的正确性(什么情况下会出现多个合法的y)
查看原帖
关于此种80pts做法的正确性(什么情况下会出现多个合法的y)
490694
Compound_Interest楼主2022/4/5 08:18
#include<cstdio>
#define int long long
using namespace std;
int x,z,t;
int gcd(int a,int b){
	if(!b)
		return a;
	return gcd(b,a%b);
} 
inline int read()
{
    int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f;
}
bool flag;
signed main(){
	scanf("%lld",&t);
	while(t--){
		flag=0;
		x=read();z=read();
		for(int i=1;i*i<=x;i++){
			//printf("i=%lld\n",i);
			if(x%i==0){
				int y1=z/(x*i);
				int y2=z/(x*(x/i));
			//	printf("i=%lld\n",i);
				if(x*y1*gcd(x,y1)==z){
					flag=1;
					printf("%lld\n",y1);
					break;
				}
				else if(x*y2*gcd(x,y2)==z){
					flag=1;
					printf("%lld\n",y2);
					break;
				}
			}
		}
		if(!flag)
			printf("-1\n");
	}
	return 0;
}

评测记录

这种做法直接找到合法就输出不会不能保证y最小吗

如果直接输出y1可能会出现后面有比他小还合法的吗

什么情况会出现多个合法的y

2022/4/5 08:18
加载中...