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 でコードを実行すると問題が発生しますが、この特定のコードを使用して 10 桁の整数を追加する場合のみです。
最後の for ループの if ステートメントでは、n を出力するか、追加する前に n を文字列に変換すると、正しい数値が出力されます。ただし、整数に再度変換すると、同じ問題が発生します。
この問題は桁数 = 11 でも発生しますが、桁数 < 10 では発生しません。
私は一生、エラーを見つけることができません(または、実際にエラーがあるかどうかを判断することはできません)。これに関するアドバイスをいただければ幸いです。