本文主要是介绍NOIP2001普及组 最大公约数和最小公倍数问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最大公约数和最小公倍数问题
时间限制: 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;
}
这篇关于NOIP2001普及组 最大公约数和最小公倍数问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!