본문 바로가기
프로그래밍/알고리즘

백준 2581번: 소수

by 만디기 2024. 3. 31.

문제 : https://www.acmicpc.net/problem/2581

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net

 

1) 내 해답

// 소수를 하나씩 세서 범위 내 소수 최대값과 소수 합을 구한다.

#include <cstdio>
#include <cmath>

int main()
{
    int M = 0, N = 0;
    int minSosu = -1, sum = 0;

    scanf("%d %d", &M, &N);
    
    for ( int i = M ; i <= N ; i++ )
    {
        int j = 2;

        for ( ; j < int(sqrt(double(i))) + 1 ; j++ )
        {
            if ( i % j == 0 ) break;
        }
        
        if ( ( i != 1 ) && ( j == int(sqrt(double(i))) + 1 ) )
        {
            minSosu = ( minSosu == -1 ? i : minSosu );
            sum += i;
        }
    }

    ( ( minSosu == -1 ) && ( sum == 0 ) ) ?
    puts("-1") :
    printf("%d\n%d", sum, minSosu);
    return 0;
}

# 소수 배열을 선언하고 소수 배열에 기록한 다음, 소수 최소값과 소수 합을 구한다.

M = int(input())
N = int(input())

prime = [1 for i in range(1, N + 1)]
prime[0] = 0
r = 0
minp = -1

for j in range(2, N + 1):
    for k in range(2, int( j ** 0.5 ) + 1 ):
        if j % k == 0:
            prime[j - 1] = 0
            break

for l in range(M - 1, N):
    if prime[l] == 1:
        r = r + l + 1
        if minp == -1:
            minp = l + 1

print(r, minp, sep='\n') if minp != -1 else print(minp)

 

 

2) 다른 사람의 해답

// 소수 배열을 선언하고, 2부터 진행하면서 배수들을 소수에서 제외한다.

#include<stdio.h>
int main(){
    int N,M,P[10001]={1,1},S,m,i,j;
    for(scanf("%d %d",&M,&N),i=2;i<=N;i++)
        for(j=i*2;j<=N;j+=i)
            P[j]=1;
    for(S=0,i=M;i<=N;i++)
        S+=i*!P[i];
    for(i=M;i<=N&&P[i];i++);
    printf(S?"%d\n%d":"-1",S,i);
}

# 소수 배열을 선언하고, 2부터 배수를 지워 나간다.

m=int(input())
n=int(input())
l=[1]*(n+1)
l[1]=0
for i in range(2, int(n**(0.5))+1):
    if l[i]:
        for j in range(i*i, n+1,i):
            l[j]=0

l=[i for i in range(m,n+1) if l[i] == 1]
if sum(l)==0:
    print(-1)
else:    
    print(sum(l))
    print(min(l))

'프로그래밍 > 알고리즘' 카테고리의 다른 글

알고리즘과 관련된 수학 배경 지식  (0) 2024.11.06
백준 9063번 : 대지  (0) 2024.04.22
백준 1978번: 소수 찾기  (0) 2024.03.22
백준 9506번: 약수들의 합  (1) 2024.03.22
백준 2501번: 약수 구하기  (0) 2024.03.20