欧拉计划Problem 5 最小公倍数

简介: 欧拉计划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?


最小公倍数


2520是最小的能够被1到10整除的数。


最小的能够被1到20整除的正数是多少?


解法一


暴力循环解题

依次加1,

用这个方法解决1-10还是可以的,解决1-20就太浪费时间了,至少要跑10分钟

n = 20
sn = n
while True:
    for i in range(1,n+1):
        if sn%i == 0:
            pass
        else:
            sn+=1
            break
    else:
        break
    if sn%10000==0:
        print(sn)
print(sn)

解法二


利用质数求解


其实题目就是想让求1-20 的最小公倍数,


而质数的公倍数就是质数相乘

例:2,3,5的公倍数 就是2 * 3 * 5 = 30

我们可以利用这个性质先求出来所有质数的公倍数 skip 、

又因为最后的结果,也要是质数的倍数,所以,结果也是skip的倍数

我们以skip为步长,依次判断


经过最后的测试,时间仅需要:0.000997304916381836

n = 20     # 1-n
skip = 1
for i in range(1,n+1):   # 求里面的质数的乘积,因为质数互质,
    if fs(i):
        skip *= i     # 最后求出的数一定是skip的倍数,只有是skip的倍数,才能满足所有的质数为它的因子
bei = 1
while True:
    skip2 = bei*skip      # 求倍数
    for i in range(1,n+1):
        if skip2%i!=0:   # 如果不满足1-n为它的因数,就增加一倍
            bei+=1
            break
    else:   # for else 结构自己在看看,当1-n所有的数都是 skip2 的因数,跳出while循环
        break
print(skip2)


相关文章
|
9月前
|
算法
求最大公约数和最小公倍数的算法
求最大公约数和最小公倍数的算法
99 0
|
5月前
|
移动开发 算法
求其最大公约数和最小公倍数
求其最大公约数和最小公倍数。
97 5
|
算法 搜索推荐 程序员
欧几里得算法
欧几里得算法(Euclidean algorithm)是一种计算两个数的最大公约数(Greatest Common Divisor,简称 GCD)的算法。欧几里得算法的基本思想是通过辗转相除的方式,将两个数逐步缩小,直到它们的公约数为止。欧几里得算法的时间复杂度为 O(log n)。
276 1
P1865 A % B Problem(欧拉筛,永远的神)
P1865 A % B Problem(欧拉筛,永远的神)
66 0
求解最大公约数和最小公倍数
求解最大公约数和最小公倍数
求解最大公约数和最小公倍数
|
算法
求最大公约数和最小公倍数的几种算法
求最大公约数和最小公倍数的几种算法
172 0
欧几里得算法,既辗转相除法。用于计算正整数a,b的最大公约数
欧几里得算法,既辗转相除法。用于计算正整数a,b的最大公约数
118 0
求解最大公约数(两种)
求解最大公约数(两种)
171 0
|
数据挖掘
HDU-1032,The 3n + 1 problem(水题)
HDU-1032,The 3n + 1 problem(水题)
|
算法
【欧拉计划第 10 题】 质数之和 Summation of primes
【欧拉计划第 10 题】 质数之和 Summation of primes
133 0