我写了一个小脚本来查找 e (与旧Google广告相关)数字中的n位数字素数:
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。
我不能为我的生活找到错误(或者弄清楚是否有错误,真的)。对此的一些建议将不胜感激。
答案 0 :(得分:0)
您的代码运行正常,您看到的是正常的。这些是Python long integers的字面表示。
打印列表时,列表的内容将打印为表示形式,输出与repr()
function相同。另一种方法是打印列表中的各个元素。
然而,您不必担心长期表示。这只是泄漏的Python整数的实现细节:
>>> 1234567890
1234567890
>>> type(1234567890)
<type 'int'>
>>> 12345678901234567890
12345678901234567890L
>>> type(12345678901234567890)
<type 'long'>
这里,Python解释器将表达式的结果打印为repr()
表示 。大于sys.maxint
的整数会自动变为long
整数。
引用文档:
普通整数(也称为整数)是使用C中的
long
实现的,它给出了至少32位的精度(sys.maxint
总是设置为当前平台的最大纯整数值,最小值为-sys.maxint - 1
)。长整数具有无限的精度。
和
未加修饰的整数文字(包括二进制,十六进制和八进制数)会产生普通整数,除非它们表示的值太大而无法表示为普通整数,在这种情况下它们会产生一个长整数。带有
'L'
或'l'
后缀的整数文字会产生长整数('L'
是首选,因为1l
看起来太像11!)。
常规和长整数之间的比较和算术是完全支持和透明的:
Python完全支持混合算术:当二进制算术运算符具有不同数值类型的操作数时,具有“较窄”类型的操作数被扩展为另一个的操作数,其中普通整数比长整数窄,比浮点更窄比复杂更窄。混合类型数字之间的比较使用相同的规则。
Python 3完全消除了这一区别。