最大公约数和最小公倍数问题
时间限制: 1 Sec
内存限制: 128 MB
题目描述
输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数。
条件:
1、P,Q是正整数
2、要求P,Q以x0为最大公约数,以y0为最小公倍数。
试求:满足条件的所有可能的两个正整数的个数。
样例
输入:x0=3 yo=60
输出:4
说明(不用输出)此时的 P Q 分别为:
3 60
15 12
12 15
60 3
所以:满足条件的所有可能的两个正整数的个数共4种.
输入
输入只有一行,为两个正整数x0和y0。
输出
输出只有一行,为满足条件的所有可能的两个正整数的个数。
样例输入
3 60
样例输出
4
来源
NOIP2001普及组
此题较UVa 10892(点击打开题解)更为简单。
完整代码:
/*0ms,964KB*/
#include<cstdio>
int main()
{
long long m, n, nn, ans, i, count;
scanf("%lld%lld", &m, &n);
if (n % m) putchar('0');///注意特判
else
{
n /= m;
ans = 1;
for (i = 2; i * i <= n; i += 2)///不用求素数,因为范围很小(注意n在不断减小)
{
if (n % i == 0)
{
count = 0;
while (n % i == 0)
{
n /= i;
++count;
}
ans <<= 1;
}
if (i == 2)
--i;///小技巧
}
if (n > 1) ans <<= 1;
printf("%lld", ans);
}
return 0;
}