This Project Euler question меня немного смущает.Project Euler # 27 с использованием Python
Вот мое решение, которое я думал, было правильным:
import math
start = time.time()
def check_prime(a, b, n):
num = n**2 + a * n + b
mod = 3
if num >= 0:
check = int(math.sqrt(num))
else:
return False
while mod <= check:
if num % mod == 0:
return False
mod += 2
return True
def main():
n = 0
max_n = 0
for a in xrange(-1000, 1000):
for b in xrange(-1000, 1000):
while check_prime(a, b, n):
n += 1
if n > max_n:
max_n = n
product = a * b
n = 0
print max_n, product
print time.time() - start
if __name__ == '__main__':
main()
Это дает мне подряд премьер-список 376, где фактический список является только 71. Я думаю, что я просто трудно понять вопрос. Разве самый длинный премьер-лист не должен составлять не менее 80, поскольку это тот, который приведен в качестве примера? Моя программа вычисляет произведение двух терминов для 71 списка, но затем оно продолжает расти до 376.
Есть ли что-то в этом вопросе?
Просто взглянув на это быстро, я вижу ошибки, связанные с ошибкой в границах цикла 'for'. – user2357112
Вы перезагружаете 'n' во внешнем цикле. Я уверен, что вы хотите сделать это во внутреннем цикле или реорганизовать свой код, чтобы вам не нужны переменные счетчика, подверженные ошибкам. – user2357112
Ух, да. Я думал, что это <= 1000, но это всего лишь 1000. Тем не менее тот же результат. Спасибо хоть. – Josh