繁体   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