چالش 27 سایت پروژه اویلر بازهم ربطی به اعداد اول دارد. درباره اعداد اول در اینجا و اینجا و چند سوال دیگر که با جستجو می توانید آنهارا پیدا کنید صحبت کرده ایم.
در سوالی که مطرح شده فرمولی به ما داده شده است به این صورت:
n2 + an + b
که قدرمطلق a<1000 و قدرمطلق b<=1000 می باشد. این سوال از ما خواسته به ازای n=0 به بالا ضرب دوعدد a و b را پیدا کنیم که توسط این دو عدد بتوان بزرگترین توالی اعداد اول با فرمول بالا را تولید کرد. جواب این چالش در زبان برنامه نویسی پایتون آمده است و بنظر می آید کدها قابلیت خوانایی خوبی دارند و توضیحات اضافه نیاز نداشته باشند:
import math
def isPrime(num):
prime = True
if num < 2:
return False
if num == 2:
return True
for n in range(3, int(math.sqrt(num)), 2):
if num % n == 0:
prime = False
break
return prime
def testEquation(a, b):
n = 0
while True:
test = n**2 + a*n + b
if isPrime(test):
n += 1
else:
break
return n
best = 0
bestA = 0
bestB = 0
for a in range(-1000, 1001):
for b in range(-1000, 1001):
c = testEquation(a, b)
if c > best:
best, bestA, bestB = c, a, b
print(bestA*bestB)