Welcome

首页 / 软件开发 / 数据结构与算法 / NOIP2001普及组 最大公约数和最小公倍数问题

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   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;}