while(1) 작심삼일();

[백준 1929번] 소수 구하기 본문

CS/baekjoon

[백준 1929번] 소수 구하기

hanjongho 2021. 1. 31. 02:23

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

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net

풀이) 

소수의 정의를 이용해서 풀어보았다. 사실 n / 2가 아닌 루트n으로 하면 더 최적의 알고리즘이 되지만, sqrt를 구현하지않았고, 대신 100만의 제한에 맞춰서 100만루트인 1000을 최대값으로 설정해두었다. 

#include <iostream>
using namespace std;

int is_prime(int n)
{
    int i;

    if (n < 2)
        return (0);
    i = 2;
    while (i <= n / 2 && i <= 1000)
        if (n % i++ == 0)
            return (0);
    return (1);
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int M, N;
	
    cin >> M >> N;
    for (int i = M; i <= N; i++)
        if (is_prime(i))
            cout << i << "\n";
    return (0);
}

 

 

제 코드는 절대 완벽하지 않습니다

더 좋은 풀이방법 혹은 코드에 관한 질문이 있으시면 언제든 댓글주세요!

'CS > baekjoon' 카테고리의 다른 글

[백준 2004번] 조합 0의 개수  (0) 2021.01.31
[백준 1931번] 회의실 배정  (0) 2021.01.31
[백준 1912번] 연속합  (0) 2021.01.31
[백준 1780번] 종이의 개수  (0) 2021.01.31
[백준 14889번] 스타트와 링크  (0) 2021.01.30
Comments