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

2021-09-21 12:53:32 字數 1745 閱讀 1426

尤拉計畫(project euler)。

我們稱 197 為乙個迴圈質數,因為它的所有輪轉形式: 197, 971 和 719 都是質數。

100 以下有 13 個這樣的質數: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 和 97.

100 萬以下有多少個迴圈質數?

# 將引數的個位數字調整至最前面,即輪轉一次

defrotate

(i):

u, v = i //

10, i %

10 k =

10**

(len

(str

(u))

)* v + u

return k

# 質數表

n=1000000

primes =

[true

]* n

primes[0]

= primes[1]

=false

primes[

4: n:2]

=[false]*

len(primes[

4: n:2]

)for i in

range(3

,int

(n **

0.5)+1

,2):

if primes[i]

: primes[i * i: n: i]=[

false]*

len(primes[i * i: n: i]

)ans=[2

,3,5

,7]for i in

range(11

,n,2):

if primes[i]

:#如果是質數就進行輪轉判斷

found=

true

tmp = i

for k in

range

(len

(str

(i))-1

):tmp=rotate(tmp)

ifnot primes[tmp]

: found=

false

break

if found:

print

(len

(ans)

)

輸出:

55十進位制數字585轉成二進位制為1001001001

585

=10010010012

585=1001001001_2

585=10

0100

1001

2​可以看出在十進位制和二進位制下都是回文(從左向右讀和從右向左讀都一樣)。

求 100 萬以下所有在十進位制和二進位制下都是回文的數字之和。

(注意在兩種進製下的數字都不包括最前面的 0)

print

(sum

([i for i in

range

(1000000)if

str(i)

==str

(i)[::

-1]and

str(

bin(i))[

2:]==

str(

bin(i))[

2:][

::-1

]]))

輸出:

872187

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

尤拉計畫 project euler 記d n 為n 的所有真因子 小於 n 且能整除 n 的整數 之和。如果 d a b 並且 d b a,且 a b,那麼 a 和 b 就是乙個親和數對 amicable pair 並且 a 和 b 都叫做親和數 amicable number 例如220的真因子...

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程式設計之尤拉計畫37 38

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