C程序不能显示3000个数字

C程序不能显示3000个数字,c,long-integer,primes,C,Long Integer,Primes,这个程序应该显示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 - 300

这个程序应该显示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();
}
#包括
#包括
#包括
main()
{
无符号长数值,可除数值;
printf(“1-3000范围内的素数是:\n”);

for(num=1;num首先要做的事情是将
sqrt
调用从for循环中取出。您可以计算一次。更好的是,将其与

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

for(divisible_num=2;divisible_num*divisible_num当我运行您的代码时,它的范围是1-3000。
我不确定你有什么问题。
get char()似乎有点不合适

此外,一旦选中2,就不必再除以任何偶数。 此代码在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);
             }
   } 

用于(num=3;num请记住一件事作为旁注:-始终在
a=b
之后留出空间。a=b
应该是
a=b
您是否尝试过在您的终端中向上滚动?我运行了此代码,得到的值肯定小于743——一直到1。此外,由于您的方式,此代码错误地将2标记为非素数设置循环。在
for()
循环之后、外部
if()之前插入
--divisible_num
@Michael正如我评论的那样,只需添加insert
--divisible_num
检查它在这里的工作情况,是的,请考虑下面两个好的建议。
prog>out.txt
或按24行等待inkeys。另外2是prime正确的建议,从我这里为循环添加
只检查奇数+1很好,但我更喜欢
prime&&divisible_num啊!你说得对,我真傻。你的评论即使没有解释也很有道理。谢谢!添加
getchar()
是那些在Windows中双击图标运行编译程序的人的常见伎俩。程序完成工作后,窗口将消失。好的,谢谢!我以前没有使用Windows在C中编程,你知道的越多。
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);
             }
   }