本题来自 Project Euler 第5题:https://projecteuler.net/problem=5

# Project Euler: Problem 5: Smallest multiple
# 2520 is the smallest number that can be divided by
# each of the numbers from 1 to 10 without any remainder.
# What is the smallest positive number that is
# evenly divisible by all of the numbers from 1 to 20?
# Answer: 232792560 # 求解2个数字的最大公约数 f(x,y)
def f(x,y):
t = 1
for i in range(1,min(x,y)+1):
if x%i == 0 and y%i ==0:
t = max(t, i)
return t m = 1
for i in range(1,21):
#两个数字相乘,再除以其最大公约数,可得最小公倍数
m = (m * i) // f(m, i)
print(m)

为了这题,我这数学渣真是想破了脑袋也没想出算法。后来只好借助网络手段,在 “Python实现Project Euler 5” 中了解到,原来求解 a,b 两个数字的最小公倍数,可以把 a,b 相乘,然后除以这两个数字的小大公约数。虽然算法有了,但作者写的代码俺实在看不懂(啥“辗转相除法”,唉……),只好照着描述的算法,写出了上面的代码(相比之下,我的代码繁复很多啊):

先定义函数 f(x,y),用来求解任意两个数字的最大公约数。思路是:先比校 x,y 得出更小的数字,然后从1到这个更小的数字,逐一拿来跟 x 和 y 除,如果都能整除,则表示是公约数,取最大的公约数即可。

之后就简单了,从 1 开始,两个两个地计算最小公倍数,结果再与下一个数字一起计算最小公倍数,算到 20 就能得出答案了。

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

P.S.:最初的想法是,找到 1-20 之间的所有质数,相乘。后来发现乘完之后的数字根本无法被 20 整除。之后又试了好多办法,都不管用,我的数学真是没救了……

有谁能看懂 “Python实现Project Euler 5” 这篇文章里的代码的,求解释!

Python练习题 033:Project Euler 005:最小公倍数的更多相关文章

  1. Python练习题 032:Project Euler 004:最大的回文积

    本题来自 Project Euler 第4题:https://projecteuler.net/problem=4 # Project Euler: Problem 4: Largest palind ...

  2. Python练习题 029:Project Euler 001:3和5的倍数

    开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...

  3. Python练习题 046:Project Euler 019:每月1日是星期天

    本题来自 Project Euler 第19题:https://projecteuler.net/problem=19 ''' How many Sundays fell on the first o ...

  4. Python练习题 039:Project Euler 011:网格中4个数字的最大乘积

    本题来自 Project Euler 第11题:https://projecteuler.net/problem=11 # Project Euler: Problem 10: Largest pro ...

  5. Python练习题 049:Project Euler 022:姓名分值

    本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...

  6. Python练习题 048:Project Euler 021:10000以内所有亲和数之和

    本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...

  7. Python练习题 047:Project Euler 020:阶乘结果各数字之和

    本题来自 Project Euler 第20题:https://projecteuler.net/problem=20 ''' Project Euler: Problem 20: Factorial ...

  8. Python练习题 045:Project Euler 017:数字英文表达的字符数累加

    本题来自 Project Euler 第17题:https://projecteuler.net/problem=17 ''' Project Euler 17: Number letter coun ...

  9. Python练习题 044:Project Euler 016:乘方结果各个数值之和

    本题来自 Project Euler 第16题:https://projecteuler.net/problem=16 ''' Project Euler 16: Power digit sum 2* ...

随机推荐

  1. laravel发送邮件配置

    1.设置发送方,即邮件服务器,可以使用163邮箱,设置smtp,开启后获取授权码 2.在env文件配置 MAIL_DRIVER=smtpMAIL_HOST=smtp.163.com  //邮箱服务器M ...

  2. 高可用服务之Keepalived邮件通知配置

    上一篇博客我们了解了keepalived的架构以及安装.VIP的配置和高可用相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13634755.html: ...

  3. 前端插入date类型的数据到数据库

    //插入 @Override public boolean insertEmp(Emp emp) { String sql = "insert into emp(lwlEmpno,lwlEn ...

  4. LiteOS间歇计算技术:IOT终端真正感受“电量自由”

    摘要:LiteOS间歇计算为什么能使物联网终端实现长续航? 物联网设备.场景复杂多样,小到智能穿戴的耳机,大到大型基建设备,更有我们陌生而又熟悉场景,例如深海探测.森林监控.野生动物跟踪等等能量采集场 ...

  5. Java单例模式的实现与破坏

    单例模式是一种设计模式,是在整个运行过程中只需要产生一个实例.那么怎样去创建呢,以下提供了几种方案. 一.创建单例对象 懒汉式 public class TestSingleton { // 构造方法 ...

  6. boostrap栅格系统自适应的布局

    1.栅格系统 ​ Bootstrap是基于移动优先的原则开发的,使用了一系列的媒体查询(media queries)方法,为我们的布局和界面创建自适应的的分界点.这些分界点主要是基于视口宽度的最小值, ...

  7. AD16

    第三集   制作光敏小夜灯的原理图 1.点击G切换栅格的精度 2.元器件放置好之后要先布局在布线 3.布线完成后要检查电路的合理性.对应查一下电阻的个数,位置是不是符合.在原理上大概的估计是否可以. ...

  8. [LeetCode]415. 字符串相加、43. 字符串相乘

    题目 415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 题解 维护一个temp表示当前两数相加+上一个进位的和. 每次更新结果的一位. 注意终止条件. 最后将 ...

  9. LuoGu P1909 买铅笔???

    题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔. ...

  10. MySQL页分裂和页合并

    预备知识了解,索引页,数据页,b+tree 页是innoDB中管理储存空间的基本单位,页有很多中,存放数据的叫做索引页.