Description
求小于n的所有素数的数量。
Input
多组输入,输入整数n(n<1000000),以0结束。
Output
输出n以内所有素数的个数。
Sample Input
10 0
Sample Output
4
这种传统的方法Time Limit Exceeded
#include
#include
#include
#include
#include
using namespace std;
int zhi(int m)
{ int k;
int i;
k=sqrt(m);
for(i=2;i<=k;i++)
{
if(m%i==0)
return 0;
}
return 1;
}
int main()
{
int n,i,y=0;
while(scanf("%d",&n)&&n)
{
for(i=2;i<=n;i++)
{
if(zhi(i))
y++;
}
printf("%d\n",y);
}
return 0;
}
更新版(素数)其实这是另一种方法(
厄拉多塞筛算法)
#include
#include
#include
#include
using namespace std;
bool a[1000000];
int main()
{
int n,i,j,y;
while(~scanf("%d",&n)&&n)
{
y=0;
memset(a,1,sizeof(a));
for(i=2; i
下面的空间和时间都会变大,但也能过
#include
#include
#include
#include
#include
using namespace std;
int a[1000006];
int main()
{
int n,i,j,y;
for(i=0;i<=1000000;i++)
{
a[i]=1;
}
for(i=2;i<=1000000;i++)
{
if(a[i]==1)
{
for(j=2;j*i<=1000000;j++)
{
a[i*j]=0;
}
}
}
while(~scanf("%d",&n)&&n)
{ y=0;
for(i=2;i<=n;i++)
{
if(a[i]==1)
{y++;}
}
printf("%d\n",y);
}
return 0;
}