Python3 欧拉计划 问题1-5

字数 365阅读 342

EulerProject.png

  欧拉计划(Project Euler)是一个解题网站,包括一系列有挑战性的数学与计算机编程题;要解开它们,需要的不止是数学知识:尽管数学能够帮助你找到一些优雅而有效的方法,大多数题目仍需要借助计算机和编程技巧来完成解答。本系列会持续按序更新对全部问题的基于Python3的解决方法。此外本系列文章仅提供问题的中文版,英文题目请参见网站

1、3和5的倍数

  小于10的非零自然数中是3或者5的倍数有3、5、6、9,这四个数的和为23。计算小于1000的自然数中是3或者5的倍数的所有数的和。

Python3解答
an=sum([i for i in range(1,1000) if i%3==0 or i%5==0])
print(an)
答案:233168

2、斐波那契数列中的偶数

  斐波那契数列中每一项均是由前两项的和组成,以1和2作为开始的两项,则前10项为1、2、3、5、8、13、21、34、55、89。
  请计算最后一项不超过400万的斐波那契数列中的所有偶数之和。

Python3解答
a,b=1,2
fan=2#开始的两项中的偶数
while a+b<=4000000:
    a,b=b,a+b
    if(a+b)%2==0:#只计算偶数
        fan+=a+b
print(fan)
答案:4613732

3、最大素因数

  13195的素因数为5、17、13和29。求60051475143的最大素因数。

Python3解答
def getfactor(num):
    arr = []
    i = 2
    while num != 1:
        if num % i == 0:
            while num % i == 0:
                arr.append(i)
                num /= i
        i = i + 1
    return  max(arr)
print(getfactor(600851475143))
答案:6857

4、最大的乘积回文数

  所谓回文数就是从后往前和从前往后读是一样的数。由两个2位数相乘得到的最大乘积回文数是 9009 = 91 × 99。
  找出由两个3位数相乘得到的最大乘积回文数。

Python3解答
def an_palindromic(number):  # 判断回文数
    num = str(number)
    if num == num[::-1]:
        return True

result = 0
for ip in range(100, 1000):
    for jp in range(100, 1000):
        pro = ip * jp
        if an_palindromic(pro):
            result = max([result, pro])

print(result)
答案:993*913=906609

5、最小倍数

  能被1到10这10个数整除的最小的正数是2520。计算最小的能够被1到20整除的正数。

Python3解答
def an_decompose(num):
    arr = []
    ifg = 2
    while num != 1:
        if num % ifg == 0:
            while num % ifg == 0:
                arr.append(ifg)
                num /= ifg
        ifg = ifg + 1
    return arr
an=[]#20以内的数分解为质因数
for i in range(2,21):
    for w in an_decompose(i):   
        an.append(w)
def an_list(list1,list2):
    for i in list2:
        while list1.count(i)<list2.count(i):
            list1.append(i)
    return list1
an=list(set(an))
fan=2
while fan<=20:#如果一个数的全部质因数包括在an里,则不增加。否则少几个加几个。
    an=an_list(an,an_decompose(fan))
    fan+=1
fan=1#计算最终的乘积
for i in an:
    fan*=i
print(fan)
答案:232792560

持续更新,欢迎讨论,敬请关注!!!

推荐阅读更多精彩内容