尤拉計畫(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…,它的迴圈節長度為1.我們看到,1/7有長為6的迴圈節.
在小於1000的數中,求出使1/d的小數表示擁有最長迴圈節的d值.
分析:
先把乙個數把質因子中的2和5除去後,得到的數和原來的數,兩者的倒數迴圈節長度相同。如何計算乙個數的迴圈節長度:計算它能被多少長度的9整除就行了,6能被1位的9整除,所以它的迴圈節長度是1,7能被6位的999999整除,所以它的迴圈節長度是6
# 返回n的迴圈節長度
deflength
(n):
i=1while n %2==
0:n =n //
2while n %5==
0:n =n //
5while
true:if
(10**i -1)
% n ==0:
return i
else
: i+=
1num,l_max =7,
6for n in
range(2
,1000):
if l_max < length(n)
: num,l_max = n,length(n)
print
(f"對應的迴圈節長度為"
)
輸出:
983對應的迴圈節長度為982
尤拉發現了二次式 n2+
n+
41n^2+n+41
n2+n+4
1,當n取0-39這40個連續整數時,都得到質數。當n取40和41時,表示式的值不再是質數。對另乙個二次式 n2−
79n
+1601
n^2-79n+1601
n2−79n
+160
1,當n取0-79這80個連續整數時,得到80個質數。兩個係數-79和1601的乘積是-126479.
考慮 n2+
an+b
n^2+an+b
n2+an+
b形式的二次式,其中|a|和|b|均不超過1000.找出係數a和b的乘積,使得n從0連續取值時,該二次式可以產生最多個質數,找出該公式的係數乘積
分析:
題目要求n從0開始連續產生質數,那麼b是乙個質數,b+1是乙個偶數。
n=1;1+a+b,顯然|a|一定是乙個奇數
# 判斷n是否質數
defisprime
(n):
if n ==2:
return
true
elif n <
2or n%2==
0:return
false
for i in
range(3
,int
(n **
0.5)+1
,2):
if n % i ==0:
return
false
return
true
# 返回公式產生的連續質數個數
deffind_n
(a,b)
: n=
0while isprime(n*n+a*n+b)
:n+=
1return n
am,bm,num=0,
0,0for b in
range(3
,1000):
if isprime(b)
:for a in
range(-
999,
1000,2
):tmp=find_n(a,b)
if tmp>num:
am,bm,num=a,b,tmp
print
(f"*="
)
輸出:
-61*971=-59231
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程式設計之尤拉計畫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...