جواب سوال 27 پروژه اویلر: Quadratic primes

پروژه اویلر

چالش 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)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.