1、10以下的自然數中,屬於3或5的倍數的數字有3,5,6,9,它們之和為23找出1000以下的自然數中,屬於3或5倍數的所有數字之和。
"""
尤拉計畫
10以下的自然數中,屬於3或5的倍數的數字有3,5,6,9,它們之和為23
找出1000以下的自然數中,屬於3或5倍數的所有數字之和
"""def
exactnum
(m,n,num):
if num%m==0
or num%n==0:
return
true
else:
return
false
sum=0
for i in range(1,1000):
if exactnum(3,5,i):
sum=sum+i
print("1000以內整數中屬於3或5倍數的所有數字之和為:"+str(sum))
2、找出斐波那契數列中數值不超過400萬的項,求這些項中為偶數的項之和
"""
尤拉計畫
找出斐波那契數列中數值不超過400萬的項,求這些項中為偶數的項之和
"""fibo=[1,2]
sum=2
a=0while a<4000000:
lenf=len(fibo)
a=fibo[lenf-1]+fibo[lenf-2]
if a%2==0:
sum=sum+a
print("求和結果為:"+str(sum))
3、找出乙個合數的最大質因數,如13195的質因數包括:5,7,13和29,29是其最大質因數。請找出600851475143的最大質因數。
import time
import math
defisprime
(n):
if n<2:
return
false
elif n==2:
return
true
else:
m=int(math.sqrt(n))
for i in range(2,m+1):
if n%i==0:
return
false
return
true
"""思路:
從小到大逐數判斷是否為因數,再判斷該因數是否為質數,加入質因數列表
再判斷該因數對應的因數是否為質數,如是,加入質因數列表
"""def
findmaxpn
(n):
list=
m=int(math.sqrt(n))
for i in range(2,m+1):
if n%i==0:
if isprime(i):
if isprime(n/i):
if list:
list.sort()
print(list)
return list[-1]
else:
print("引數為質數,不符合條件!!")
return
0start1=time.clock()
print(findmaxpn(600851475143))
end1=time.clock()
print("方法一耗時"+str(end1-start1)+"s")
執行結果:
[71, 839, 1471, 6857]
6857
方法一耗時0.2167969211667917s
4、乙個回文數是指從左向右和從右向左都一樣的數字。最大的由兩個兩位數乘積構成的回文數9009=91*99;找出最大的由兩個三位數乘積構成的回文數。
import copy
import time
start=time.clock()
#先定義乙個判斷回文數的函式
defispalindrome
(n):
m=nlist=
#把n的各位倒序插入列表
while m!=0:
m=int(m/10)
#下一句不能簡單的用listx=list代替
#這樣無法真正生成乙個新列表賦給listx,而是把list的引用賦給了listx
#如果修改list或者修改listx,其實都是修改的引用指向的內容
#會同時影響listx和list
listx=copy.deepcopy(list)
list.reverse()
if list==listx:
return
true
else:
return
false
list=
for i in range(100,1000):
for j in range(i,1000):
s=i*j
if ispalindrome(s):
print(list)
list.sort()
print(list[-1])
end=time.clock()
print("總耗時:"+str(end-start)+"seconds")
5、找出能被1到20之間各個數整除的正整數
#找出能被1到20之間各個數整除的正整數
import math
import time
start=time.clock()
defisprime
(n):
if n<2:
return
false
elif n==2:
return
true
else:
s=int(math.sqrt(n))
for i in range(2,s+1):
if n%i==0:
return
false
return
true
deffindmax
(n):
#找出1~n之間的各個質數,並求其乘積
s=1for i in range(2,n+1):
if isprime(i):
s=s*i
lista=list(range(2,n+1))
m=s#最終結果必定為前面質因數乘積的倍數
#遍歷列表,遇見不能整除的則加一次質數乘積
#再重新遍歷,直到都可以整除
while
true:
a=1for x in lista:
if m%x!=0: #不能整除,須加一次再進入到下次迴圈重新遍歷
a=0break
if a==1:
break
m=m+s
return m
print(findmax(20))
end=time.clock()
print("共耗時:"+str(end-start)+"秒!")
尤拉計畫 6
前十個自然數的平方和是 1 2 2 2 10 2 385 前十個自然數的和的平方是 1 2 10 2 552 3025 所以平方和與和的平方的差是3025 385 2640.找出前一百個自然數的平方和與和平方的差。def get square sub x 遞迴,展開行列式 if x 1 return...
尤拉計畫 14
以下迭代序列定義在整數集合上 n n 2 當n是偶數時 n 3n 1 當n是奇數時 應用以上規則,並且以數字13開始,我們得到以下序列 13 40 20 10 5 16 8 4 2 1 可以看出這個以13開始以1結束的序列包含10個項。雖然還沒有被證明 collatz問題 但是人們認為在這個規則下,...
尤拉計畫 15
從乙個2 2網格的左上角開始,有6條 不允許往回走 通往右下角的路。對於20 20的網格,這樣的路有多少條?def get load num x,y x,y 網格的路數等於 x 1,y x,y 1 if x 0 or y 0 return 1return get xy load x 1,y get ...