2

b素数が でp割れるようなものを見つけるために、Python でプログラムを作成しましたb^2-8。の範囲b は [1, (p+1)/2] です。

小さな整数の場合、たとえば最大7桁までです。ただし、大きな整数の場合はそうではありませんp = 140737471578113。エラーメッセージが表示されます

    for i in range (2,p1,1):
MemoryError

私はプログラムを次のように書きました

#!/usr/bin/python3
p=long(raw_input('enter the prime number:'))
p1=long((p+1)/2)
for   i in range (2,p1,1):
    s = long((i*i)-8)
    if (s%p==0):
        print i
4

1 に答える 1

3

Python 2 では、range()関数は整数の完全なリストを作成します。

>>> range(3)
[0, 1, 2]

64 ビット マシンでは、そのリストに必要な 70368735789056 の整数だけで、約 1.5ペタバイトのメモリが必要になり、64 ビット ポインターのリスト オブジェクトを数えなくても済みます。メモリ不足になっても不思議ではありません。

通常、代わりにこのxrange()関数を使用して疎な範囲 iterable を生成しますが、そのオブジェクトは長い数値を処理できません。ここwhileではループで十分です。

i = 2
while i < p1:
    s = long((i*i)-8)
    if (s%p==0):
        print i
    i += 1
于 2013-10-22T11:07:35.007 に答える