0

このプログラムは 1 ~ 3000 の範囲の素数を表示するはずですが、743 ~ 3000 の素数しか表示しません。範囲内のすべての素数を出力するにはどうすればよいですか?

プログラムは次のとおりです。

#include <stdio.h>
#include <math.h>
#include <stdbool.h>

main()
{

      unsigned long long num, divisible_num;

      printf("The prime numbers in the range of 1 - 3000 are: \n");
      for(num=1;num<=3000;num++)
       {
             for(divisible_num=2;divisible_num<=sqrt(num);divisible_num++)
             {     
                 if(num%divisible_num==0)
                    break;
             }
                 if(num%divisible_num!=0)
                 {
                 printf("%lu\n", num);
                 }
       }
      getchar();
}
4

2 に答える 2

1

sqrt最初にすべきことは、その for ループから呼び出しを取得することです。一度計算しても構いません。さらに良いことに、すべて一緒に削除します

for(divisible_num=2;divisible_num * divisible_num<=num;divisible_num++)

sqrt(num) 以下の素数で割り切れない場合、その数値は素数です。

int prime = 1;
for(divisible_num=2;divisible_num * divisible_num<=num;divisible_num++) {
    if (num % divisible_num == 0) {
       prime = 0;
       break; 
    }

}

if (prime) {
    //print the num
} 

外側のループも 2 から開始する必要があります。

于 2013-07-20T07:31:14.357 に答える