簡體   English   中英

C程序無法顯示3000個數字

[英]C program can not display 3000 numbers

該程序應顯示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();
}

最重要的事情是從for循環中獲取sqrt調用。 你可以計算一次。 更好的是,將它們全部刪除

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開始。

當我運行你的代碼時,它的范圍是1-3000。 我不確定你的問題是什么。 get char()似乎有點不合適。

一旦檢查兩次,您不必再除以更多偶數。 此代碼的工作范圍為3 - 3000

for(num=3;num<=3000;num++)
   {
         int prime = (num%2 != 0);
         long root = sqrt(num);
         for(divisible_num=3;prime && divisible_num <= root;divisible_num+=2)
         {     
             if(num%divisible_num==0){
                prime = 0;
             }
         }
             if(prime)
             {
             printf("%lu\n", num);
             }
   } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM