問題描述:
素數的平方是回文,比如11*11=121。
求不超過1000的平方回文素數。
我的**:import math
def prime(m):
count=0
for i in range(2,int(math.sqrt(m))+1):
if m%i==0:
count=1
if count!=1:
return true
else:
return false
def palindrome(n):
if str(n**2)==str(n**2)[::-1]:
return true
else:
return false
for j in range(2,1000):
if prime(j) and palindrome(j):
print j,
結果:2 3 11 101 307
我的思路:
過程很簡單,還是定義兩個函式,乙個用來判斷出入的數是否是素數,另乙個用來判斷傳入數的平方是否為回文數,最後遍歷2到1000中的數,輸出同時滿足數是素數且數的平方是回文數這兩個條件的數;
示例**:import math
def isprimenumber(num):
i = 2
x = math.sqrt(num)
while i
if num%i == 0:
return false
i += 1
return true
def reverse(num):
rnum = 0
while num:
rnum = rnum*10 + num%10
num /= 10
return rnum
def rprimenumber(num):
arr =
i = 2
while i
if isprimenumber(i) and i**2 == reverse(i**2):
i += 1
return arr
print rprimenumber(1000)
結果:[2, 3, 11, 101, 121, 307]
示例**的結果中的121是錯誤的,121=11*11 121*121=14641,如果這算是對的,那麼111也應該算進去的,111=3*37 111*111=12321
更改:將示例**中while i < x改為while i <= x即可,錯誤的原因是判斷素數的取值範圍(2到數的平方根之間的值,)錯誤,少算了math.sqrt(num);
更改後的結果:
[2, 3, 11, 101, 307]
866 回文素數
求出大於或等於n的最小回文素數。回顧一下,如果乙個數大於 1,且其因數只有 1 和它自身,那麼這個數是素數。例如,2,3,5,7,11 以及 13 是素數。回顧一下,如果乙個數從左往右讀與從右往左讀是一樣的,那麼這個數是回文數。例如,12321 是回文數。示例 1 輸入 6輸出 7示例 2 輸入 8...
52 回文平方數
52 回文平方數 問題描述 回文數是指從左向右念和從右向左唸都一樣的數。如12321就是乙個典型的回文數。給定乙個進製b 2 輸入說明 共一行,乙個單獨的整數b b用十進位制表示,比如18 輸出說明 每行兩個數字,第二個數是第乙個數的平方,且第二個數是回文數。注意 輸出時,這兩個數都應該以b進製表示...
基礎52 回文平方數
52 回文平方數 問題描述 回文數是指從左向右念和從右向左唸都一樣的數。如12321就是乙個典型的回文數。給定乙個進製b 2 輸入說明 共一行,乙個單獨的整數b b用十進位制表示,比如18 輸出說明 每行兩個數字,第二個數是第乙個數的平方,且第二個數是回文數。注意 輸出時,這兩個數都應該以b進製表示...