今天的题目:
我的答案:(源码无法正常显示的话就点击右键->查看源文件)
#include<stdio.h>
int main()
{
int limit;
int a[1000] = {0};
int div;
int i;
int j;
int flag = 0;
printf("Input the top range N (0 - N) : ");
scanf("%d",&limit);
for(i = 0;i < limit;i++)
{
a[i] = i + 1;
}
for(j = 0;j < limit ; j++)
{
for(i = 0;i < limit ; i++)
{
if(a[i] >= 2 && flag < a[i])
{
div = a[i];
flag = div;
break;
}
}
//ԐҘҪ݇¼divքճСìӲΪ֚һՎࠏ֨ˇ2ìŇôЂһՎյҹɃ̼ˇ3ŘìҘȻѨҪԐʏһՎքdivСԚ֢Վքdiv
for(i = div + div - 1;i < limit;i += div)
{
a[i] = 0;
}
}
printf("\nPrimer Number Genetation Program");
printf("\n================================\n");
for(i = 0;i < limit;i++)
{
if(a[i] >= 2)
printf("%d\t",a[i]);
}
printf("\n");
}
标准答案:
// ans to sieve
#include<stdio.h>
#define MAXSIZE 200
#define DELETED 1
#define KEPT 0
int main()
{
int sieve[MAXSIZE + 1];
int count = 1;
int prime;
int i,k;
for(i = 0;i <= MAXSIZE;i++)
sieve[i] = KEPT;
for(i = 0;i <= MAXSIZE;i++)
if(sieve[i] == KEPT)
{
prime = i + i + 3;
count++;
for(k = prime + i;k <= MAXSIZE;k += prime)
{
sieve[k] = DELETED;
}
}
printf("\n%6d",2);
for(i = 0;i <= MAXSIZE;i++)
{
if(sieve[i] == KEPT)
{
if(k > 0)
{
printf("\n");
k = 1;
}
printf("%6d",2 * i + 3);
k++;
}
}
}
答案正在研究中,说实话,没看出比我的有什么效率上的明显提升。先别喷,我再研究研究吧。哈哈。