지식보부상님의 공부 일지

소수 판단 함수(1) 본문

파이썬 문제풀이

소수 판단 함수(1)

지식보부상님 2021. 5. 21. 23:28

소수인지 판단하는 함수를 작성하면, 

우선 가장 간단하게 생각하면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
def is_prime(N):
    c = 0
    for i in range(2, N):
        if N % i == 0:
            c += 1
            break
    return c == 0
 
for numbers in range (2101):
    if(is_prime(numbers)):
        print(numbers)
cs

주어진 수보다 작은 숫자들로 모두 나눠보고, 

나눠지는 수가 있다면 소수가 아니게 된다.

 

 

이 생각에서 한단계 나아가서 

어떤 수 N에 대해 N이 a*b로 나눠지는 수라면 

a와 b의 최대는 루트 N이라는 생각을 하면,

1
2
3
4
5
6
7
8
9
10
11
12
def is_prime(N):
    c = 0
    for i in range(2int(N**0.5)+1):
        if N % i == 0:
            c += 1
            break
    return c == 0
 
for numbers in range (2201):
    if(is_prime(numbers)):
        print(numbers)
 
cs

위와 같이 루트 N 이하의 값에 대해서만 나눠봐도 된다. 

 

 

마지막으로, 

정말 한단계 더 나아가서

이번에는 소수로만 수들을 나눠도 된다는 생각을 할 수 있다.

물론 이때도 루트 N 보다 작은 수들로만 나눠도 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
prime = [2]
def is_prime(N):
    c = 0
    for i in prime:
        if (N != 2 and N % i == 0):
            c += 1
            break
        if i > int(N**0.5)+1:
            break
    if (c==0 and N != 2):
        prime.append(N)
    return c == 0
 
for numbers in range (21001):
    if(is_prime(numbers)):
        print(numbers)
cs

이때 2가 소수임은 잘 알려진 사실이므로,

초기에 prime에 넣어주었고,

그 이후로는 append를 통해 소수들을 prime 리스트에 넣어주었다.

 

 

'파이썬 문제풀이' 카테고리의 다른 글

백준 3009번: 네 번째 점  (3) 2024.12.06
백준 10156번: 과자  (4) 2024.12.06
백준 4101번: 크냐?  (1) 2024.12.06
백준 2480번: 주사위 세개  (1) 2024.12.06
에라토스테네스의 체- prime counting function  (0) 2021.05.21