Question
Return the number of prime numbers between 1 and the given number n.
The prime number can be divided only by 1 and itself.
(1 is not a prime number)
Limitation
- n a natural number that is more than or equal to 2 and less than or equal to 1000000.
Example of I/O
n | result | description |
10 | 4 | 4 prime numbers [2, 3, 5, 7] between 1 and 10. |
5 | 3 | 3 prime numbers [2, 3, 5] between 3 and 5. |
My Solution 1
def solution(n):
answer = 0
for x in range(2, n + 1):
isPrime = True
for y in range(2, x - 1):
if(x%y == 0):
isPrime = False
if(isPrime):
answer += 1
return answer
# This solution can be used to find the answer.
# However, it can not pass the quiz because the time takes too long.
My Solution 2 with Sieve of Eratosthenes
def solution(n):
answer = 0
# a list including all positive integers less than n.
# excluding even numbers which are multiples of 2
prime_numbers = set([x for x in range(3, n + 1, 2)])
for x in range(3, n + 1, 2):
if x in prime_numbers:
# eliminate numbers which are multiples of x
prime_numbers -= set([x for x in range(x * 2, n + 1, x)])
# add 1 because prime_numbers does not include 2
answer = len(prime_numbers) + 1
return answer
Explanation
References
'Problem solving > Algorithms' 카테고리의 다른 글
[LeetCode] 1480. Running Sum of 1d Array (Python) (0) | 2021.01.09 |
---|---|
An array of divisible numbers (나누어 떨어지는 숫자 배열) (0) | 2020.09.10 |
Sum between two integers (두 정수 사이의 합) (0) | 2020.08.28 |
Kth Number (K번째 수) (0) | 2020.08.27 |
Mock Test Answers (모의고사) (0) | 2020.08.26 |