【发布时间】:2011-10-16 19:01:22
【问题描述】:
我有这样的东西:
palindromes=[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 101, 111, 121, ..., 99799, 99899, 99999]
# of course im generating it :)
def isPrime(number):
for i in range(2,int(number/2)+1):
if number%i == 0:
return True
return False
def removeNonPrimes(palindromes):
for palindrom in palindromes:
if isPrime(palindrom):
palindromes.remove(palindrom)
return palindromes
palindromes = removeNonPrimes(palindromes)
它不会删除所有非素数
我不知道为什么
【问题讨论】:
-
您的函数
isPrime应命名为isNonPrime以使其与其返回值一致。这个 SO question 有更多关于在迭代 stackoverflow.com/questions/1207406/… 时从列表中删除项目 -
如果你想找出所有的回文素数,最好先找到素数,然后检查哪些是回文数。
-
@hughdbrown
n下面有多少回文?说n = 10^m,然后numPAL(n) = SUM 10^(ceiling(i/2)) {i=1,2..m} = 2*SUM 10^j {j=1,2..m/2}让我们说这是关于2*sqrt(n)。由于对k以下数字的试除法测试是k^1.5给定或取一个对数因子,因此对回文的素性整体测试将约为~ 3*n^0.75。但是由埃拉托色尼的筛子生成低于n的素数需要~ n*log(log(n))时间。哪个更糟。