尤拉計畫(魚C論壇) 20161107

2021-07-24 10:03:54 字數 3617 閱讀 3815

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 ...