0

次のコードを使用して、単純なふるいを生成しました-

#include<stdio.h>

int main()
{
int a,b,i,j;
scanf("%d%d",&a,&b);

int m = (a)/2;
int d[m+1];

for (i=0;i<m;i++)
    d[i]=1;

for (i=1;i<=m;i++)
    for (j=i;j<=((m-i)/(2*i+1));j++)
        d[i+j+2*i*j]=0;

if (b<=2) printf("2\n");
for (i=0;i<m;i++)
    if(d[i]!=0&&i!=0) printf("%d\n",2*(i)+1);

}

しかし、bまでの素数を見つけるために使用される余分な時間を排除したいので、m = (ab)/2を作成し、ゼロではなくb/2とsqrt b/2からメインのforループを開始しようとしましたが、そうではありませんどうすれば余分な計算を減らすことができますか? 前もって感謝します。

4

0 に答える 0