소수 찾기 (소수표)

1413 단어 소수
빠른 찾기 소수
시간 제한:
1000ms | 메모리 제한:
65535 KB
난이도:
3
 
묘사
지금 너에게 정수 N을 하나 줄게. 빨리 2에 찾아내라고...N 이 수 안에 있는 모든 소수.
 
입력
양의 정수 N (N<=2000000) 을 제시합니다.
그러나 N은 0으로 프로그램을 종료합니다.
테스트 데이터가 100 그룹을 넘지 않음
출력
2~N 범위의 모든 소수를 출력한다.두 수 사이를 빈칸으로 나누다
샘플 입력
5
10
11
0

샘플 출력
2 3 5
2 3 5 7
2 3 5 7 11

 
제목:
0이 끝날 때까지 N(1~20000000)을 입력합니다.2에서 N 범위의 모든 소수를 출력합니다.
 
아이디어:
일반적인 방법으로는 반드시 TLE가 될 것이기 때문에 소수표를 만들어서 2에서 N까지 소수의 전부를 표시해야 한다.
 
     AC:
#include<stdio.h>
#include<string.h>
#define MAX 2000000
int num[MAX];

void makeprime()
{
	memset(num,0,sizeof(num));
	for(int i=2;i<=1000000;i++) //     
		{
			if(!num[i])
			{
				for(int j=i+i;j<=MAX;j+=i)  //   i+i  
					 num[j]=1;
			}
		}
	return;
}
//1      ,0     
int main()
{
	int n;
	makeprime();
	while(scanf("%d",&n)!=EOF&&n)
	{
		printf("%d",2);
		for(int i=3;i<=n;i++)
			 if(!num[i]) printf(" %d",i);
		printf("
"); } return 0; }

 
요약:
    1.롱롱을 사용하면 시간을 초과할 수 있고 int로 충분합니다.
    2.배불리 먹고 버티는 문제...
 

좋은 웹페이지 즐겨찾기