Post

소수 찾기,소수 구하기 백준 1978번, 1929번 수학

https://www.acmicpc.net/problem/1978

문제는 소수찾기이기에 설명도 생략하겠습니다.

소수의 정의는 1과 자기자신 이외로는 나누어지지 않는 수를 뜻합니다. 정의에 따라서 1은 소수도 합성수도 아닙니다.

여기서 소수를 n-1까지 모두 나누어서 확인해보는 대신 제곱근까지만 확인해도 소수임을 판별할 수 있으니 소수를 판별하는 함수를 따로 만들고 이를 통과하는 조건문을 걸어서 소수의 개수를 세면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import math

def func(x):
    if x==1:
        return False
    temp = int(math.sqrt(x))
    for i in range(2,temp+1):
        if x%i == 0:
            return False
    return True

num = int(input())
num_list = list(map(int,input().split()))
ans = 0
for i in range(num):
    if func(num_list[i]):
        ans+=1
print(ans)

https://www.acmicpc.net/problem/1929

이어서 소수 찾기 문제를 하나더 봅시다. 푸는 로직은 똑같으니 소수를 구하는 함수는 그대로 재사용 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import math

def func(x):
    if x==1:
        return False
    temp = int(math.sqrt(x))
    for i in range(2,temp+1):
        if x%i == 0:
            return False
    return True

n,m = map(int,input().split())
for i in range(n,m+1):
    if func(i):
        print(i)

주어진 n부터 m까지 소수인지 확인을 하면 됬습니다. 다만 여기서 에라토스테네스의 체를 사용해서 한번 문제를 풀어 봤습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import math

def func(x):
    if x==1:
        return False
    temp = int(math.sqrt(x))
    for i in range(2,temp+1):
        if x%i == 0:
            return False
    return True

n,m = map(int,input().split())
bool_list = [False]*(m+1)
for i in range(n,m+1):
    if not bool_list[i] and func(i):
        bool_list[i]=True
        print(i)
        temp = 2
        while True:
            if i*temp>=m:
                break
            bool_list[i*temp]=False
            temp+=1

제가 로직을 잘못 짠건지

img1 daumcdn

걸리는 시간이 약간 늘어나있네요 메모리는 소수를 확인하기 위한 bool을 추가 했으니 당연한거고요

This post is licensed under CC BY 4.0 by the author.