这道题很水,不过WA了好多,我要崩溃,只能看仔细再交,忽然发现还有0种的可能。我的做法很简单就是枚举。设p=a*x; q=b*x; a,b肯定互质,且a*b=y/x,当y%x!=0时肯定不可能。然后枚举互质a,b的对数乘以2就可以了。
代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int GCD(int a,int b)
{
if(b==0) return a;
return GCD(b,a%b);
}
int Solve(int n)
{
int cnt=1,i;
for( i=2;i*i<n;i++){
if( n%i!=0||n/i%i==0) continue;
if( GCD(n/i,i)==1)
cnt++;
}
return cnt*2;
}
int main()
{
int x,y;
while( scanf("%d%d",&x,&y)!=EOF){
if(y%x!=0) printf("0\n");
else if(x==y) printf("1\n");
else if(x==1) printf("2\n");
else printf("%d\n",Solve(y/x));
}
return 0;
}
本文介绍了一种使用枚举法解决特定数学问题的方法。通过枚举互质对并利用最大公约数(GCD)来判断解的可能性,实现了有效的算法。特别讨论了如何处理输入参数之间的特殊关系,以确保正确性和效率。
3627

被折叠的 条评论
为什么被折叠?



