基于python语言:已知最大公约数与最小公倍数,反求符合条件的两个数
来源:互联网 发布:网络平台运营成本预算 编辑:程序博客网 时间:2024/06/05 11:39
上一篇写了辗转相除法求的两个数的最大公约数与最小公倍数,现在想逆向算法,已知最大公约数与最小公倍数,求得符合条件的两个数。
其实这个有很多陷阱,刚开始觉得对了,后来看到一个反例,知道自己错了。所以优化了一下。
先简单化,求出两个数的公约数的个数:
#求公约数import mathtemp1=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 L1for i in common_divisor(a): for j in common_divisor(b): if i==j: sum1+=1print(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 6003 2008 7524 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)这组数可以验证代码的正确性,但是大多数代码会多解。
0 0
- 基于python语言:已知最大公约数与最小公倍数,反求符合条件的两个数
- 求两个数的最大公约数与最小公倍数
- 求两个数的最大公约数与最小公倍数
- 求两个数的最大公约数与最小公倍数
- 基于C++求两个数的最大公约数最小公倍数
- 用C语言求两个数的最大公约数和最小公倍数
- C语言如何求两个数的最大公约数和最小公倍数。
- c语言:求两个数的最大公约数和最小公倍数
- C++练习之 求两个数的最大公约数与最小公倍数
- 求两个数的最大公约数和最小公倍数
- 如何求两个数的最大公约数,最小公倍数
- 求两个数的最大公约数和最小公倍数
- 求两个数的最大公约数和最小公倍数
- Java求两个数的最大公约数最小公倍数
- 求两个数的最大公约数和最小公倍数
- 求两个数的最大公约数和最小公倍数
- 求两个数的最大公约数及最小公倍数 。
- 求两个数的最大公约数和最小公倍数
- 开启redis-server提示 # Creating Server TCP listening socket *:6379: bind: Address already in use--解决方法
- (转)专访Palantir创始人:如何接二连三创出独角兽公司?
- 字符串替换
- python书籍
- 【IMWeb训练营作业】团队作业:模仿知乎日报(未完成)
- 基于python语言:已知最大公约数与最小公倍数,反求符合条件的两个数
- Shell脚本编写和执行
- AngularJS教程 AngularJS从0到1——AngularJS控制器
- 每天一个linux命令(46):vmstat命令
- 简单递归找最近公共父节点
- 最详细的Log4j使用教程
- for(;;)和while(true)的区别
- Makefile的使用方法
- 汉诺塔问题