[noip2001普及(初中)组] 第二题《最大公约数和最小公倍数问题》解题报告

原创 2014年08月26日 21:28:06

输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数

条件:  1.P,Q是正整数

2.要求P,Q以x0为最大公约数,以y0为最小公倍数.

试求:满足条件的所有可能的两个正整数的个数.

二个正整数x0,y0

满足条件的所有可能的两个正整数的个数

3 60

4


看这篇博客的分析http://zhurui250.blog.163.com/blog/static/137270520201162414616998/

粘贴过来

【分析】
gcd(a,b)为数a与数b的最大公约数(Greatest Common Divisor),lcm(a,b)为数a与数b的最小公倍数(least common multiple)。

题目给出了gcd(p,q)和lcm(p,q),让我们求解p,q的正整数解数。
设s=lcm(p,q)/gcd(p,q),问题化为求解 xy=s 且 gcd(x,y)=1 的正整数解数。

--------------------------------------------补充----------------------------------------------

因为

设gcd(p,q) = G lcm(p, q) = L

根据lcm性质 p*q/G = L 且 p|G q|G (整除) 

则两边同时除G

p/G * q/G = L / G = s,由gcd性质可知 p/G与q/G互质

则原问题就变为了x*y=s 并且gcd(x, y)=1

--------------------------------------------------------------------------------------------------

因式分解就可以得到。

然后枚举s的因数x,得到另一个因数y,判断gcd(x.y)是否等于1即可。详见程序1

这里讲一个更有数学味的算法,希望大家看完。

按照上面的分析,无非就是把问题转化成为了求S的因数集合中,两两互质的数对的个数。
设 s=a[1]^p[1]*a[2]^p[2]*a[3]^p[3]……*a[n]^p[n]
设 x是s的一个因数,相对的因数是y=s/x

一定不存在a[i](s的质因数),a[i]|x且a[i]|y
于是,如果 a[i]|x,因为s=xy,所以 a[i]^p[i]|x 且,不存在a[i]|y  (符号打不出来,这里表示不同余)
设 b[i]=a[i]^p[i]
s总共有n个质因数,那么答案一定是 2^n

这里用语言简单说明一下,通过刚才的证明,有xy=s,所以 x 必为 b数组中若干不相同元素的乘积,那么不是x因数的 b数组中的元素,一定是y的因数,那么考虑会选择哪几个元素相乘得到x,必然用二进制加以枚举。
 
也就是说 s 有 n 中质因数,则一定有 2^n 种答案。





相关文章推荐

最大公约数与最小公倍数问题

[问题描述]输入二个正整数x0,y0(2≤x0≤100000,2≤y0≤1000000),求出满足下列条件的P、Q的个数。条件:1、P、Q是正整数2、要求P、Q以xO为最大公约数,以yO为最小公倍数。...

wikioi1012 最大公约数和最小公倍数问题(2001年NOIP全国联赛普及组)

题目描述 Description 输入二个正整数x0,y0(2 条件:  1.P,Q是正整数 2.要求P,Q以x0为最大公约数,以y0为最小公倍数. 试求:满足条件的所...

NOIP2001普及组 最大公约数和最小公倍数问题

最大公约数和最小公倍数问题 http://218.5.5.242:9018/JudgeOnline/problem.php?id=1111 时间限制: 1 Sec   内存限制: 128 M...

noip2001 最大公约数和最小公倍数问题 (质因数分解)

A1131. 最大公约数和最小公倍数问题 时间限制:1.0s   内存限制:256.0MB   总提交次数:1023   AC次数:381   平均分:63.15 将本题分享...

循环-14. 最大公约数和最小公倍数(15)

本题要求两个给定正整数的最大公约数和最小公倍数。 输入格式: 输入在一行中给出2个正整数M和N( 输出格式: 在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分...

黑马程序员——java基础——练习题:键盘输入两个正整数求两个数的最大公约数和最小公倍数

android培训、java培训期待与您交流! 练习题:键盘输入两个正整数求两个数的最大公约数和最小公倍数 公约数:几个数公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数...

上机题目(初级)-计算两个正整数的最大公约数和最小公倍数(Java)

题目如下:代码如下:package huawei; import java.util.Scanner; public final class Demo { // 功能:获取两个整数的最大公约数...

C语言实例12——输入两个正整数m和n,求其最大公约数和最小公倍数。

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 //程序分析:利用辗除法。 #include int main(){ int a,b,num1,num2,temp; printf("p...

NOIP 2001-2——最大公约数和最小公倍数问题(简单推导/分解质因数)

问题描述 输入二个正整数x0,y0(2 条件:  1.P,A是正整数 2.要求P,Q以x0为最大公约数,以y0为最小公倍数. 试求:满足条件的所有可能的两个正整数的个数. 样例 输入:x0...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[noip2001普及(初中)组] 第二题《最大公约数和最小公倍数问题》解题报告
举报原因:
原因补充:

(最多只允许输入30个字)