알고리즘/백준
백준 4948_베르트랑 공준
래울
2020. 11. 8. 15:32
https://www.acmicpc.net/problem/4948
4948번: 베르트랑 공준
베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼
www.acmicpc.net
- 에라토스테네스의 체 알고리즘
- N+1크기의 배열을 선언한다.
- 배열을 모든 요소를 0으로 초기화한다.
- 배열의 인덱스가 2의 배수인 모든 칸을 1로 초기화한다.
- 그 다음수인 3을 선택한다.
- 배열의 인덱스가 3의 배수인 모든 칸을 1로 초기화한다.
- 그 다음 소수인 5를 선택한다.
- 배열의 인덱스가 5의 배수인 모든 칸을 1로 초기화한다.
- 위 내용을 N까지 반복한다.
void func(int n)
{
int arr[n+1]={0,};
int i,j;
for(i=2; i<=n; i++){
if(arr[i]==1){
continue;
}
for(j=2*i; j<=n; j+=i){
arr[j]=1;
}
}
}
- 베르트랑 공준 문제 풀이
#include <stdio.h>
int arr[246913]; //전역변수는 초기화 하지 않으면 0으로 자동초기화됨
void func(int n) //소수 구하기
{
int i,j;
for(i=2; i<=2*n; i++){
if(arr[i]==1){
continue;
}
for(j=2*i; j<=2*n; j+=i){
arr[j]=1;
}
}
}
int main()
{
int n;
int i,sum=0;
func(123456); //문제에서 범위가 (N <= 123456)
while(1){
scanf("%d", &n);
if(n==0)
return 0;
sum = n;
for(i=n+1; i<=2*n; i++)
sum-=arr[i];
printf("%d\n", sum);
}
}