基于python语言:已知最大公约数与最小公倍数,反求符合条件的两个数
2017-04-24 22:43
826 查看
上一篇写了辗转相除法求的两个数的最大公约数与最小公倍数,现在想逆向算法,已知最大公约数与最小公倍数,求得符合条件的两个数。
其实这个有很多陷阱,刚开始觉得对了,后来看到一个反例,知道自己错了。所以优化了一下。
先简单化,求出两个数的公约数的个数:
给你两个数a和b,计算出它们分别是哪两个数的最大公约数和最小公倍数。
输出这两个数,小的在前,大的在后,以空格隔开。若有多组解,全部输出。
利用(1,600)这组数可以验证代码的正确性,但是大多数代码会多解。
其实这个有很多陷阱,刚开始觉得对了,后来看到一个反例,知道自己错了。所以优化了一下。
先简单化,求出两个数的公约数的个数:
#求公约数 import math temp1=input('input one positive integer:') temp2=input('input other positive integer:') a=int(temp1) b=int(temp2) sum1=0 #求一个数的所有约数的函数 def common_divisor(n): L1=[] for i in range(1,n+1): if(n%i==0): L1.append(i) return L1 for i in common_divisor(a): for j in common_divisor(b): if i==j: sum1+=1 print(sum1)
给你两个数a和b,计算出它们分别是哪两个数的最大公约数和最小公倍数。
输出这两个数,小的在前,大的在后,以空格隔开。若有多组解,全部输出。
import math #求两个数的最大公约数的函数 def gcd(a,b): if (a%b==0): return b return gcd(b,a%b) def fun_ab(a,b): for i in range(1,int(math.sqrt(a*b))+1): if(b%i==0)and(i%a==0): if gcd(i,a*b//i)==a:#验证在约数里面满足最大公约数的解 print(i,a*b//i) ## fun_ab(1,600) 1 600 3 200 8 75 24 25 然后求两个数和最小的那一组解: #求多个解中和最小的import math gcd(a,b): if (a%b==0): return b return gcd(b,a%b) def fun_ab(a,b): j=0 for i in range(1,int(math.sqrt(a*b))+1): if(b%i==0)and(i%a==0): if gcd(i,a*b//i)==a: j=i print(j,a*b//j) fun_ab(1,600) ## 24 25
利用(1,600)这组数可以验证代码的正确性,但是大多数代码会多解。
相关文章推荐
- 基于C++求两个数的最大公约数最小公倍数
- Java求两个数的最大公约数最小公倍数
- 两个数的乘积等于其最大公约数与最小公倍数的乘积,怎么证明?
- 山东理工大学ACM平台题答案关于C语言 1181 C语言实验——最小公倍数和最大公约数
- Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
- python实现最小公倍数和最大公约数
- 输入两个数,并输出最大公约数和最小公倍数!
- oj2003: C语言实验——最小公倍数和最大公约数
- python 最大公约数与最小公倍数
- C语言实验——最小公倍数和最大公约数
- 已知最大公约和最小公倍数,求可能的解的组数
- Python实现利用最大公约数求三个正整数的最小公倍数示例
- 两个数的乘积等于其最大公约数与最小公倍数的乘积,怎么证明?
- 求两个数最大公约数和最小公倍数的简便方法
- 最大公约数gcd 最小公倍数
- 最大公约数最小公倍数
- 最小公倍数与最大公约数的调用函数
- 最大公约最小公倍数