티스토리 뷰

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

 

1929번: 소수 구하기

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

www.acmicpc.net


정답코드

#include<iostream>
#include<vector>
#include<cmath>

using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int m, n, pnum;
    vector<int> v;

    cin >> m >> n;

    for(int i = m; i <= n; i++){
        pnum = sqrt(i);
        if(i == 2 || i == 3){
            v.push_back(i);
            continue;
        }
        if((i % 2) == 1){// 홀수이면
            for(int j = 2; j <= pnum; j++){
                if(i % j == 0) break;
                if(j == pnum) v.push_back(i);
            }
        }
    }

    for(int i = 0; i < v.size(); i++){
        cout << v[i] << '\n';
    }

}

풀이과정

bool primeNum(int num){ // 시간초과
    if(num % 2 == 0) return false;
    for(int i = 3; i < num; i++){
        if(num % i == 0) 
            return false;
        if(i > num/2) 
            return true;
    }
}

PrimeNum을 판별하는 함수를 사용했으나 시간초과로 인해 제출하지 못했다.

소수를 판별하는 절차를 외워두면 편하게 풀 수 있을듯하다.

 

1. 2나 3이라면 소수이다.

2. 2부터 sqrt(num)까지 나누었을 때 나누어 떨어지면 소수가 아니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함