尤拉計畫(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...