BEAKJOON

백준(4948번 베르트랑 공준)풀이 C++

Shin_jisoo 2021. 1. 13. 17:06
728x90

www.acmicpc.net/problem/4948

 

4948번: 베르트랑 공준

베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼

www.acmicpc.net

1) 주석 없는 VERSION

#include <iostream>
#include <cmath> 
#include <cstdio>

using namespace std;

int main() {
	long long n, test, i, j;
	long long cnt = 0;

	while (1) {
		cnt = 0;
		cin >> n;
		if (n == 0) break;

		else if (n == 1) cout << "1"<<"\n";
		
		else {
			for (int i = n + 1;i <= 2 * n;i++) {

				if (i % 2 != 0) {

					for (int j = 3;j <= sqrt(i);j+=2) {
						if (i % j == 0) {
							cnt--;
							break;
						}
					}
					cnt++;
				}

			}
			cout << cnt << "\n";
		}

	}

}

 

2) 주석 있는 VERSION

 

시간초과 주의

 

#include <iostream>
#include <cmath> 
#include <cstdio>

using namespace std;

int main() {
	long long n, test, i, j;
	long long cnt = 0;

	while (1) {
		cnt = 0;
		cin >> n;

		//0이 입력될 때까지 반복
		if (n == 0) break;

		//1일 경우 1출력
		else if (n == 1) cout << "1"<<"\n";
		
		else {
			for (int i = n + 1;i <= 2 * n;i++) {

				//짝수는 소수가 아니므로 한번 걸러주기
				if (i % 2 != 0) {

					//j+=2 주의하기
					//에라토스테네스의 소수 필요 충분조건사용
					for (int j = 3;j <= sqrt(i);j+=2) {

						// 2보다 크면서 자기 자신의 제곱근까지의 수에 나누어지지 않는 수가 소수
						if (i % j == 0) {
							cnt--;
							break;
						}
					}
					cnt++;
				}

			}
			cout << cnt << "\n";
		}

	}

}