Java算法课作业2——最小公倍数和最大公约数问题
题目要求
1.题目描述
输入二个正整数x0,y0(2≤x0≤100000,2≤y0≤1000000),求出满足下列条件的P、Q的个数。
条件:1.P、Q是正整数
2.要求P、Q以xO为最大公约数,以yO为最小公倍数。
试求,满足条件的所有可能的两个正整数的个数。
2.输入数据
两个正整数
输出数据
满足条件的所有可能的两个正整数的个数
样例输入
3 60
3.样例输出
4
4.样例说明
说明:(不用输出)此时的 P Q 分别为:
3 60
15 12
12 15
60 3
所以,满足条件的所有可能的两个正整数的个数共4种
相关数学知识
-
算数基本定理、
设正整数 n>1, 则 n 可唯一地表示为:
其中 p1<p2<,…, <ps 是 s 个相异的素数, 指数ki都是正整数。 此定理又称作唯一析因定理(unique factorization theorem) 。 该表达式称作整数 n 的素因子分解。 -
最大公约数
设 a 和 b 是两个不全为 0 的整数,若整数 d 满足 d|a 且 d|b, 则称 d 是a, b 的公因子(common divisor),也称最大公约数。
所有公因子中最大的称作 a 与 b 的最 大 公 因 子 ( greatest common divisor) , 记作GCD(a, b)
- 最小公倍数
设 a 和 b 是两个不全为 0 的整数,若整数 m 满足 a|m 且 b|m , 则称 m是 a, b 的公倍数(common multiple)
所有公倍数中最小的正整数称作a与b 的 最 小 公 倍 数 ( least common multiple) , 记作 LCM(a, b)
- 性质
对任意的正整数a有:
GCD(0, a)=a
GCD(1, a)=1
LCM(1, a)=a
- 推论
设a,b是正整数,则
思想
设gcd(p,q) = G lcm(p, q) = L,当前GL已知。
根据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
遍历x=1——sqrt(s),若y=s/x为整数,则说明能够满足xy=s,再去判断xy是否互质。xG与yG即为满足条件的p,q。因为只取了1——sqrt(s),最后的个数count需要2。
易错点
写的时候错了好几次,主要有一