GCD和LCM
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交:33 测试通过:10
描述
输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数
条件: 1.P,Q是正整数
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的两个正整数的个数.
输入
两个数 x0 y0
输出
满足条件的所有可能的两个正整数的个数
样例输入
3 60
样例输出
4
提示
此时的 P Q 分别为:
3 60
15 12
12 15
60 3
所以:满足条件的所有可能的两个正整数的个数共4种.
题目来源
NOIP2001
分析:因为x0*y0==a*b;所以找到他们之间的一个关系,然后只要从小的开始就可以了,判断b是否能被x0整除,但差点忽略的问题是有可能x0不是最小。如6、30所以要判断下,采用欧几里德辗转相除。AC了
#include <stdio.h>
#include <math.h>
int gcd(int a,int b)
  {
int c;
if (a<b)
 {
c=a;
a=b;
b=c;
}
while (a%b)
 {
c=a%b;
a=b;
b=c;
}
return b;
}
int main()
  {
int x0,y0,i,j,k,n=0;
scanf("%d%d",&x0,&y0);
for (i=x0;i<=y0;i+=x0)
 {
if (x0*y0/i%x0==0)
 {
//判断最小公倍数
if (x0*y0%i==0)
 {
if(gcd(i,x0*y0/i)==x0)
n++;
}
}
}
printf("%d\n",n);
}
注:代码注释中应为//判断最大公约数。
|