[noip2001普及(初中)组] 第二题《最大公约数和最小公倍数问题》解题报告
2014-08-26 21:28
260 查看
题目描述Description
输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数条件: 1.P,Q是正整数
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的两个正整数的个数.
输入描述Input Description
二个正整数x0,y0输出描述Output Description
满足条件的所有可能的两个正整数的个数样例输入Sample Input
3 60样例输出Sample Output
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
^p
设 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 种答案。
相关文章推荐
- NOIP2001-普及组复赛-第二题-最大公约数和最小公倍数问题
- c++回文日期【NOIP2016普及组】解题报告
- 纪中训练 day1 【NOIP普及组】模拟赛D组 解题报告
- NOIP2012普及组解题报告
- NOIP 2007 普及组解题报告
- 纪中训练 day4 【NOIP普及组】模拟赛D组 解题报告
- NOIP 1998 普及组 2的幂次方 解题报告
- NOIP2010普及组 导弹拦截(重庆一中高2018级信息学竞赛测验3) 解题报告
- NOIP2017普及组解题报告
- noip2009普及组道路游戏解题报告
- 纪中训练 day8 【NOIP普及组】模拟赛D组 解题报告
- NOIP2008 普及组T3 传球游戏 解题报告-S.B.S.
- NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)
- 【NOIP2016普及组】解题报告 买铅笔 回文日期 海港 魔法阵
- NOIP 2001统计单词个数 解题报告(记忆化搜索)
- 纪中训练 day3 【NOIP普及组】模拟赛D组 解题报告
- NOIP 2001解题报告
- NOIP2001普及组 最大公约数和最小公倍数问题
- NOIP2016普及组复赛解题报告
- NOIP2008 普及组T1 ISBN号码 解题报告-S.B.S.