問題是:列印出滿足兩個條件的從 1 到 1000 的所有數字:
- 那些是素數
- 反轉后的數也是素數。例如,13 滿足(因為 13 和 31 是素數),但 19 不滿足(19 是素數,而 91 不是)。我的代碼:
def prime(n):
if n<2:
return False
for i in range(1, n):
if n%i == 0:
return False
else:
return True
def reverse(n):
List = []
while n>0:
List.append(n%10)
n = n//10
string = [str(integer) for integer in List]
a_string = "".join(string)
result = int(a_string)
print(result)
L = []
for i in range (1, 1000):
if prime(i) == prime(reverse(i)) == True:
L.append(i)
print(L)
我的似乎包含一些錯誤,因為結果與預期不符,要么不顯示,要么仍然在串列中顯示 19。先感謝您!
uj5u.com熱心網友回復:
首先,您的主要方法是錯誤的,因為回圈從 開始1
,并且每個數字都滿足n%1 == 0
,它需要從 2 開始
def prime(n):
if n < 2:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
然后你的reverse
方法沒有回傳任何東西,你已經手動嘗試過了reverse(5)
。None
def reverse(n):
values = []
while n > 0:
values.append(n % 10)
n = n // 10
return int("".join(map(str, values)))
然后將條件簡化為
for i in range(1, 20):
if prime(i) and prime(reverse(i)):
L.append(i)
反向程序也可以用字串完成,而且很短,可以行內
L = []
for i in range(1, 20):
if prime(i) and prime(int(str(i)[::-1])):
L.append(i)
uj5u.com熱心網友回復:
看起來運行prime
兩次是非常低效的。我會推薦以下內容:
def prime(n):
if n<2:
return False
for i in range(2, n):
if n%i == 0:
return False
return True
l = [i for i in range(1, 1001) if prime(i)]
print(*(x for x in l if int(str(x)[::-1]) in l))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470300.html
上一篇:R中不同變數的CAGR計算