我写了一个小脚本来查找 e 的数字中的 n 位素数(与那个旧的 Google 广告相关):
import math
# First 251 digits of e
e_digits = ("2"
"7182818284 5904523536 0287471352 6624977572 4709369995"
"9574966967 6277240766 3035354759 4571382178 5251664274"
"2746639193 2003059921 8174135966 2904357290 0334295260"
"5956307381 3232862794 3490763233 8298807531 9525101901"
"1573834187 9307021540 8914993488 4167509244 7614606680")
e_digits = e_digits.replace(" ", "")
digits = int(raw_input("Number of digits: "))
print "Finding ", str(digits) + "-digit primes in the first", len(e_digits), "digits of e."
numbers = []
primes = []
# Creates list of numbers based on variable digits
for n in range(0,len(e_digits) - (digits - 1)):
test_number = e_digits[n:n+digits]
numbers.append(int(test_number))
# Checks each number for divisors smaller than its sqrt, then appends to list primes
for n in numbers:
n_sqrt = int(math.floor(math.sqrt(n)))
div = []
for i in range(2,n_sqrt+1):
if n % i == 0:
div.append(i)
if div == []:
primes.append(n)
print primes
但是,当我设置数字 = 10 时,会打印:
[7427466391L, 7413596629L, 6059563073L, 3490763233L, 2988075319L, 1573834187, 7021540891L, 5408914993L]
除了第 6 个列表条目之外,所有列表条目都与“L”连接,我不知道为什么。当我在 IDLE 和 CMD 中运行代码时会出现问题,尽管只有在使用此特定代码附加十位整数时才会出现问题。
在最后一个 for 循环的 if 语句中,如果我打印 n,或者如果我在附加之前将 n 转换为字符串,则会打印正确的数字。但是,然后再次转换为整数会产生同样的问题。
数字 = 11 时也会出现问题,但数字 < 10 时不会出现问题。
我终生无法找到错误(或者弄清楚是否有错误,真的)。对此的一些建议将不胜感激。