Python程式設計之尤拉計畫21 22

2021-09-20 23:11:16 字數 1412 閱讀 5985

尤拉計畫(project euler)。

記d(n)為n 的所有真因子(小於 n 且能整除 n 的整數)之和。 如果 d(a) = b 並且 d(b) = a, 且 a ≠ b, 那麼 a 和 b 就是乙個親和數對(amicable pair),並且 a 和 b 都叫做親和數(amicable number)。

例如220的真因子是 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 和 110; 因此 d(220) = 284. 284的真因子是1, 2, 4, 71 和142; 所以d(284) = 220.

計算10000以下所有親和數之和。

分析:反正這不難

def

d(n)

:return

sum(i for i in

range(1

,n//2+

1)if n%i ==0)

ans =

0for a in

range(2

,10000):

b=d(a)

if a!=b and a==d(b)

: ans += a

print

(ans)

輸出:

31626

檔案names.txt (右鍵另存為)是乙個46k大小的文字檔案,包含5000多個英文名字。利用這個檔案,首先將檔案中的名字按照字母排序,然後計算每個名字的字母值,最後將字母值與這個名字在名字列表中的位置相乘,得到這個名字的得分。

例如將名字列表按照字母排序後, colin這個名字是列表中的第938個,它的字母值是3 + 15 + 12 + 9 + 14 = 53。所以colin這個名字的得分就是938 × 53 = 49714.

檔案中所有名字的得分總和是多少?

def

name_value

(name)

:return

sum(

ord(c)

-ord

('a')+

1for c in name)

f =open

("names.txt"

)lst = f.readline(

).split(

",")

lst.sort(

)score =

0for i, s in

enumerate

(lst)

: s = s.replace(

'"','')

score += name_value(s)

*(i +1)

print

(score)

f.close(

)

輸出:

Python程式設計之尤拉計畫26 27

尤拉計畫 project euler 單位分數是指分子為1的分數.分母為2 10的單位分數的小數表示如下 單位分數 小數1 2 0.51 3 0.3 1 40.25 1 50.2 1 60.1 6 1 70.142857 1 80.125 1 90.1 1 10 0.10.1 6 表示0.1666 ...

Python程式設計之尤拉計畫35 36

尤拉計畫 project euler 我們稱 197 為乙個迴圈質數,因為它的所有輪轉形式 197,971 和 719 都是質數。100 以下有 13 個這樣的質數 2,3,5,7,11,13,17,31,37,71,73,79,和 97.100 萬以下有多少個迴圈質數?將引數的個位數字調整至最前面...

Python程式設計之尤拉計畫37 38

尤拉計畫 project euler 3797 這個數很有趣。它本身是質數,而且如果我們從左邊不斷地裁去數字,得到的仍然都是質數 3797,797,97,7。而且我們還可以從右向左裁剪 3797,379,37,3,得到的仍然都是質數。找出全部 11 個這樣從左向右和從右向左都可以裁剪的質數。注意 2...