欧拉计划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)


相关文章
|
开发框架 .NET
poj 3468 A Simple Problem with Integers线段树区间修改
题目意思很简单,有N个数,Q个操作, Q l r 表示查询从l到r 的和,C l r v 表示将从l到r 的值加上v,明显的线段树,不知道线段树的人肯定暴力,肯定超时,哈哈!!
35 0
求解最大公约数和最小公倍数
求解最大公约数和最小公倍数
求解最大公约数和最小公倍数
【欧拉计划第 5 题】最小公倍数 Smallest multiple
【欧拉计划第 5 题】最小公倍数 Smallest multiple
166 0
【欧拉计划第 5 题】最小公倍数 Smallest multiple
求解最大公约数(两种)
求解最大公约数(两种)
162 0
|
算法
【欧拉计划第 10 题】 质数之和 Summation of primes
【欧拉计划第 10 题】 质数之和 Summation of primes
125 0
|
物联网 Go C++
洛谷【2】P1001 A+B Problem
洛谷【2】P1001 A+B Problem
|
算法 BI
约瑟夫问题(Josephus problem)的klog(n)解法
约瑟夫问题是一个经典的算法问题,其解决过程涉可能用到的数据结构有数组、链表,涉及的算法包括模拟、递归、递推、动态规划等等,因此非常适合做一道面试题。   问题描述: 首先n个候选人围成一个圈,依次编号为0..n-1。然后指定一个正整数k,并0号候选人开始按从1到k的顺序依次报数,n-1号候选人报数之后,又再次从0开始。当有人报到K时,这个人被淘汰,从圈里出去。下一个人从1开始重新报
4402 0

热门文章

最新文章