快速查找素数
时间限制:1000 ms | 内存限制: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
- 给出一个正整数数N(N<=2000000)
这道题其实很简单,当时第一次没注意时间,用了个素数的函数,毫无意外的T,后来看到时间,才想起来一条好重要的定理
:素数的倍数不是素数;
定义一个数组,把是素数的a[i]=1;主函数一循环就行了,不禁感慨,题不在难,在巧,处在你的盲区里才是好题。
#include<stdio.h>
#include<math.h>
int a[2000001]={0};
int main()
{
int n,i,j;
for(i=2;i<=2000000;i++)
{
if(a[i]==0)
for(j=i+i;j<=2000000;j+=i)
a[j]=1;
}
while(scanf("%d",&n)&&n!=0)
{
for(i=2;i<=n;i++)
if(a[i]==0)
printf("%d ",i);
printf("\n");
}
}