-
-
Notifications
You must be signed in to change notification settings - Fork 46.8k
Euler Problem 27 solution script Added #1466
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 10 commits
03ffa62
7b5fbaa
264615b
e802182
8f2f0be
568d408
8eaf27f
a91f13c
34a2715
ff57137
aef684f
e9fe8cb
bd47691
10e64cf
a3ec424
e6a2a00
ca19869
2f0d188
4a9d42c
5d98bc4
e18154f
bb79007
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
""" | ||
Euler discovered the remarkable quadratic formula: | ||
n2 + n + 41 | ||
It turns out that the formula will produce 40 primes for the consecutive values n = 0 to 39. However, when n = 40, 402 + 40 + 41 = 40(40 + 1) + 41 is divisible by 41, and certainly when n = 41, 412 + 41 + 41 is clearly divisible by 41. | ||
The incredible formula n2 − 79n + 1601 was discovered, which produces 80 primes for the consecutive values n = 0 to 79. The product of the coefficients, −79 and 1601, is −126479. | ||
Considering quadratics of the form: | ||
n² + an + b, where |a| < 1000 and |b| < 1000 | ||
where |n| is the modulus/absolute value of ne.g. |11| = 11 and |−4| = 4 | ||
Find the product of the coefficients, a and b, for the quadratic expression that produces the maximum number of primes for consecutive values of n, starting with n = 0. | ||
""" | ||
|
||
import math | ||
|
||
|
||
def isPrime(k): | ||
# checks if a number is prime | ||
if k < 2: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
return False | ||
elif k == 2: | ||
return True | ||
elif k % 2 == 0: | ||
return False | ||
else: | ||
for x in range(3, int(math.sqrt(k) + 1), 2): | ||
if k % x == 0: | ||
return False | ||
|
||
return True | ||
|
||
|
||
def solution(a_limit, b_limit): | ||
""" | ||
>>> solution(1000, 1000) | ||
-59231 | ||
>>> solution(2000, 2000) | ||
-126479 | ||
>>> solution(-1000, 1000) | ||
0 | ||
>>> solution(-1000, -1000) | ||
0 | ||
|
||
""" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Dedent lines 33 through 42 so they are all left aligned with line 32. |
||
longest = [0, 0, 0] | ||
# length, a, b | ||
for a in range((a_limit * -1) + 1, a_limit): | ||
for b in range(2, b_limit): | ||
if isPrime(b): | ||
count = 0 | ||
n = 0 | ||
while isPrime((n ** 2) + (a * n) + b): | ||
count += 1 | ||
n += 1 | ||
|
||
if count > longest[0]: | ||
longest = [count, a, b] | ||
|
||
ans = longest[1] * longest[2] | ||
return ans | ||
|
||
|
||
if __name__ == "__main__": | ||
print(solution(1000, 1000)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let’s use a Pythonic function name and add type hints:
def is_prime(k: int) -> bool