NOIP2001普及组 最大公约数和最小公倍数问题2014-04-26 csdn博客 synapse7最大公约数和最小公倍数问题http://218.5.5.242:9018/JudgeOnline/problem.php?id=1111时间限制: 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 6015 1212 1560 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;}