diff --git a/project_euler/problem_07/sol1.py b/project_euler/problem_07/sol1.py index 373915f88..727d7fb7f 100644 --- a/project_euler/problem_07/sol1.py +++ b/project_euler/problem_07/sol1.py @@ -1,4 +1,6 @@ """ +Problem 7: https://projecteuler.net/problem=7 + By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13 @@ -8,20 +10,21 @@ We can see that the 6th prime is 13. What is the Nth prime number? from math import sqrt -def is_prime(n): - if n == 2: +def is_prime(num: int) -> bool: + """Determines whether the given number is prime or not""" + if num == 2: return True - elif n % 2 == 0: + elif num % 2 == 0: return False else: - sq = int(sqrt(n)) + 1 + sq = int(sqrt(num)) + 1 for i in range(3, sq, 2): - if n % i == 0: + if num % i == 0: return False return True -def solution(n): +def solution(nth: int = 10001) -> int: """Returns the n-th prime number. >>> solution(6) @@ -36,18 +39,20 @@ def solution(n): 229 >>> solution(100) 541 + >>> solution() + 104743 """ - i = 0 - j = 1 - while i != n and j < 3: - j += 1 - if is_prime(j): - i += 1 - while i != n: - j += 2 - if is_prime(j): - i += 1 - return j + count = 0 + number = 1 + while count != nth and number < 3: + number += 1 + if is_prime(number): + count += 1 + while count != nth: + number += 2 + if is_prime(number): + count += 1 + return number if __name__ == "__main__": diff --git a/project_euler/problem_07/sol2.py b/project_euler/problem_07/sol2.py index ec182b835..62806e1e2 100644 --- a/project_euler/problem_07/sol2.py +++ b/project_euler/problem_07/sol2.py @@ -1,4 +1,6 @@ """ +Problem 7: https://projecteuler.net/problem=7 + By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13 @@ -7,14 +9,15 @@ We can see that the 6th prime is 13. What is the Nth prime number? """ -def isprime(number): +def isprime(number: int) -> bool: + """Determines whether the given number is prime or not""" for i in range(2, int(number ** 0.5) + 1): if number % i == 0: return False return True -def solution(n): +def solution(nth: int = 10001) -> int: """Returns the n-th prime number. >>> solution(6) @@ -29,34 +32,38 @@ def solution(n): 229 >>> solution(100) 541 + >>> solution() + 104743 >>> solution(3.4) 5 >>> solution(0) Traceback (most recent call last): ... - ValueError: Parameter n must be greater or equal to one. + ValueError: Parameter nth must be greater or equal to one. >>> solution(-17) Traceback (most recent call last): ... - ValueError: Parameter n must be greater or equal to one. + ValueError: Parameter nth must be greater or equal to one. >>> solution([]) Traceback (most recent call last): ... - TypeError: Parameter n must be int or passive of cast to int. + TypeError: Parameter nth must be int or passive of cast to int. >>> solution("asd") Traceback (most recent call last): ... - TypeError: Parameter n must be int or passive of cast to int. + TypeError: Parameter nth must be int or passive of cast to int. """ try: - n = int(n) + nth = int(nth) except (TypeError, ValueError): - raise TypeError("Parameter n must be int or passive of cast to int.") - if n <= 0: - raise ValueError("Parameter n must be greater or equal to one.") + raise TypeError( + "Parameter nth must be int or passive of cast to int." + ) from None + if nth <= 0: + raise ValueError("Parameter nth must be greater or equal to one.") primes = [] num = 2 - while len(primes) < n: + while len(primes) < nth: if isprime(num): primes.append(num) num += 1 diff --git a/project_euler/problem_07/sol3.py b/project_euler/problem_07/sol3.py index 602eb13b6..1182875c0 100644 --- a/project_euler/problem_07/sol3.py +++ b/project_euler/problem_07/sol3.py @@ -1,4 +1,6 @@ """ +Project 7: https://projecteuler.net/problem=7 + By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13 @@ -9,7 +11,8 @@ import itertools import math -def primeCheck(number): +def prime_check(number: int) -> bool: + """Determines whether a given number is prime or not""" if number % 2 == 0 and number > 2: return False return all(number % i for i in range(3, int(math.sqrt(number)) + 1, 2)) @@ -18,12 +21,12 @@ def primeCheck(number): def prime_generator(): num = 2 while True: - if primeCheck(num): + if prime_check(num): yield num num += 1 -def solution(n): +def solution(nth: int = 10001) -> int: """Returns the n-th prime number. >>> solution(6) @@ -38,8 +41,10 @@ def solution(n): 229 >>> solution(100) 541 + >>> solution() + 104743 """ - return next(itertools.islice(prime_generator(), n - 1, n)) + return next(itertools.islice(prime_generator(), nth - 1, nth)) if __name__ == "__main__":