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
持续更新,欢迎讨论,敬请关注!!!