#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
//prime[i]
//if prime[i] = 1 then i is prime number;
//otherwise i isn't prime number!
char* solve(int n)
{
int i, j;
char *prime = NULL;
prime = (char*)malloc(sizeof(char) * ( n + 1));
for(i = 0; i < n; ++i)
prime[i] = 1;
prime[0] = 0;
prime[1] = 0;
for(i = 2; i <= sqrt(n); ++i)
{
if(prime[i])
{
for(j = 2 * i; j <= n; j += i)
prime[j] = 0;
}
}
return prime;
}
void print(char *a, int n)
{
int i;
for(i = 0; i <= n; ++i)
{
if(a[i])
{
printf("%d\t", i);
}
}
printf("\n");
}
int main()
{
int n;
while(scanf("%d", &n) && n >=2)
{
time_t t1 = clock();
char *prime = solve(n);
time_t t2 = clock();
print(prime, n);
printf("time:%f\n", (t2 - t1) * 1.0 / CLOCKS_PER_SEC);
free(prime);
}
return 0;
}
/////////////以下是产生素数表的关键代码
for(i = 0; i < n; ++i)
prime[i] = 1; prime[0] = 0;
prime[1] = 0; for(i = 2; i <= sqrt(n); ++i)
{
if(prime[i])
{
for(j = 2 * i; j <= n; j += i)
prime[j] = 0;
}
}