小鲸鱼Rx 发表于 2022-4-24 19:51:29

10000以内素数的问题

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

int main()

{
        int i;
        int j;
        int count;
        for(i = 2;i <= 10000;i += 1)
        {
                int count1 = 0;
                for(j = 2;j <= i;j += 1)
                {
                        if(i % j == 0)
                        {
                                count1 += 1;
                        }
                }
                if(count1 == 1)
                {
                        count += 1;
                }
        }
        printf("10000以内共有%d个素数!\n",count);


        return 0;
}
为啥这个程序跑出来的数是33995。是那一步出现的问题,我看了好几遍真是找不出来{:5_100:}

傻眼貓咪 发表于 2022-4-24 20:01:28

应该是 if(count1 == 0) 吧?

小鲸鱼Rx 发表于 2022-4-24 20:04:10

傻眼貓咪 发表于 2022-4-24 20:01
应该是 if(count1 == 0) 吧?

素数是只能被本身和1整除的才算,除了1,也就是只有自己一个数能被整除,所以是1,如果是0就是没有一个能被整除。不存在

傻眼貓咪 发表于 2022-4-24 20:12:59

小鲸鱼Rx 发表于 2022-4-24 20:04
素数是只能被本身和1整除的才算,除了1,也就是只有自己一个数能被整除,所以是1,如果是0就是没有一个能 ...

哈哈哈哈,你开心就好{:10_254:}{:10_254:}{:10_254:}

小鲸鱼Rx 发表于 2022-4-24 20:26:10

傻眼貓咪 发表于 2022-4-24 20:12
哈哈哈哈,你开心就好

我开心啥呀我这明显不对呀,关键是哪里的问题呀

小鲸鱼Rx 发表于 2022-4-24 20:28:06

傻眼貓咪 发表于 2022-4-24 20:12
哈哈哈哈,你开心就好

改成0是32765也不对{:5_100:}

风车呼呼呼 发表于 2022-4-24 20:36:06

傻眼貓咪 发表于 2022-4-24 20:12
哈哈哈哈,你开心就好

哈哈,他count1在这是作一个标志,前面循环条件是 j <= i,必有一次和自身取余,所以得是为1才行。不得不说确实是有自己的想法哈哈

风车呼呼呼 发表于 2022-4-24 20:37:23

前面count定义的时候初始化一下,不然你在它定义之后先打印它的数值看看{:10_334:}

傻眼貓咪 发表于 2022-4-24 20:38:36

小鲸鱼Rx 发表于 2022-4-24 20:28
改成0是32765也不对

首先,你先看看你的代码中 if (i % j == 0) 表示如果除了自己和 1 之外,还有其它数可以除整对吗?然后你写了 count1 += 1; 这时 count1 已经不是 0 了对吗?那么下面如果要判断 i 是否是素数,是不是要先确认 count1 还是不是保持 0 的状态啊?(表示 count1 没有被改变过)

小鲸鱼Rx 发表于 2022-4-24 20:44:22

风车呼呼呼 发表于 2022-4-24 20:37
前面count定义的时候初始化一下,不然你在它定义之后先打印它的数值看看

就是这个{:5_110:},好了

傻眼貓咪 发表于 2022-4-24 20:46:07

#include <stdio.h>

int main()
{
    int count = 0, isPrime;
   
    for(int num = 0; num < 1e4; num++) {
      isPrime = 1; // 命名时,尽量以自己最容易明白的名字命名!!!!
      if(num < 2) continue;
      else if(num == 2) {
            count++;
      }
      else{
            for(int n = 2; n < num; n++) {
                if(num%n == 0){
                  isPrime = 0; // 如果出现除整,则不是素数
                  break; // 无需继续
                }
            }
            if(isPrime) {
                count++;
            }
      }
    }
   
    printf("%d", count);

    return 0;
}1229

小鲸鱼Rx 发表于 2022-4-24 20:48:16

傻眼貓咪 发表于 2022-4-24 20:46


感谢 大哥我是个菜鸡,刚接触这东西,所以写的东西很不灵活,看你写的真是厉害很多{:5_106:}
页: [1]
查看完整版本: 10000以内素数的问题