Я хочу напечатать все простые числа с 7 последовательными 7 с менее 10000000000
. Я получал MemoryError
при использовании range()
, потому что сгенерированный массив не мог быть сохранен, поэтому я изменил цикл на цикл while
.Оптимизация Python с большими числами
Однако программа действительно медленная. Печать первого найденного номера занимает более минуты.
import math
def is_prime(n):
if n % 2 == 0 and n > 2:
return False
i = 3
while i < math.sqrt(n) + 1:
#for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
i += 2
return True
def is_super_happy(n):
count = 0
while n != 0:
if n%10 == 7:
count += 1
if count == 7:
return True
else:
count = 0
n /= 10
return count == 7
i = 7777777
while i < 10e10:
#for i in range(7777777, int(10e10)):
if is_super_happy(i) and is_prime(i):
print i
i += 1
Я ничего не могу сделать, чтобы это ускорилось, и я хочу, чтобы это было очень быстро.
Любые идеи, советы?
вы могли бы использовать мультипроцессирование использовать другие ядра процессора. –
Не используйте 'while', используйте' xrange' вместо 'range' (в Python 3 используйте' range') – Unapiedra
Подсказка: ваши цифры - все десять цифр. Семь из них - 7 последовательных. Сколько номеров нужно рассмотреть? – RemcoGerlich