但求过程001 发表于 2025-9-25 21:26:30

求100-200之间所有的素数

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

void main()
{
        int k,m,i;
        m=100;
        k=sqrt(m);
        for(;m<=200;m++)
        {
        for(i=2;i<=k;i++)
        {
        if(m%i==0)
        {
                break;
        }
        }
        if(i>k)
        {
        printf("%d ",m);
        }
        }
        printf("\n");
}

这是我学习线上视频后打的一段程序,运行没问题,但是我发现好像里面有不是素数的数字,请问一下我这个程序哪里有错误~~

FishC 发表于 2025-9-25 21:27:51

首先,素数是指大于1的自然数,且除了1和它本身以外不再有其他因数。求100-200之间的所有素数,我们可以使用C语言编写一个程序,通过遍历每个数并检查其是否为素数来实现。

算法思路:对于每个数m从100到200,检查它是否能被2到sqrt(m)之间的任何整数整除。如果不能,则m是素数。为了简化,我们可以用i*i <= m来代替sqrt(m),避免使用数学库。

以下是完整的C语言代码:


#include <stdio.h>

int main() {
    int m, i, is_prime;
    for (m = 100; m <= 200; m++) {
      is_prime = 1; // 假设m是素数
      if (m <= 1) {
            is_prime = 0; // 处理m<=1的情况
      } else {
            for (i = 2; i * i <= m; i++) { // 检查从2到sqrt(m)的因数
                if (m % i == 0) {
                  is_prime = 0; // 发现因数,不是素数
                  break;
                }
            }
      }
      if (is_prime) {
            printf("%d ", m); // 输出素数
      }
    }
    return 0;
}


代码说明:
- 使用外层循环遍历100到200的每个数m。
- 内层循环检查m是否有因数,使用i*i <= m来优化。
- 如果m是素数,则打印出来。

运行此程序将输出100-200之间的所有素数,例如101、103、107等。代码简洁且易于理解。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

但求过程001 发表于 2025-9-25 21:38:13

能否帮我看下我那个程序哪里不对了。。。

FishC 发表于 2025-9-25 21:39:02

但求过程001 发表于 2025-09-25 21:38
能否帮我看下我那个程序哪里不对了。。。

您好!我来帮您分析一下代码中的问题,并提供一个正确的版本。

您的代码片段不完整,缺少头文件和循环逻辑。主要问题包括:

- 头文件不完整:使用 sqrt 函数需要包含 math.h。
- void main() 不是标准写法,应改为 int main()。
- 循环不完整:for 循环缺少条件和增量。
- 变量类型问题:k 是整数,但 sqrt 返回浮点数,最好避免直接使用浮点数比较。

以下是修正后的完整代码,用于求100-200之间的所有素数:


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

int main()
{
    int m, i, is_prime;
    for (m = 100; m <= 200; m++) {
      is_prime = 1; // 假设m是素数
      if (m <= 1) {
            is_prime = 0; // 小于等于1的数不是素数
      } else {
            for (i = 2; i <= sqrt(m); i++) {
                if (m % i == 0) {
                  is_prime = 0; // 能被整除,不是素数
                  break;
                }
            }
      }
      if (is_prime) {
            printf("%d\n", m);
      }
    }
    return 0;
}


关键点解释:
- 使用外层循环遍历100到200的每个数。
- 内层循环检查每个数是否能被2到其平方根之间的数整除。
- 使用 is_prime 标志来标记是否为素数。

如果还有问题,请提供更多细节!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

但求过程001 发表于 2025-9-25 21:52:07

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

void main()
{
      int k,m,i;
      m=100;
      k=sqrt(m);
      for(;m<=200;m++)
      {
      for(i=2;i<=k;i++)
      {
      if(m%i==0)
      {
                break;
      }
      }
      if(i>k)
      {
      printf("%d ",m);
      }
      }
      printf("\n");
}

这个程序实现100-200素数哪里不对

FishC 发表于 2025-9-25 21:53:08

但求过程001 发表于 2025-09-25 21:52
#include
#include

void main()
{
      in ...

您好!我来帮您分析一下代码中的问题,并提供一个正确的版本。

您的代码片段不完整,主要问题包括:

- 头文件不完整:使用 sqrt 函数需要包含 math.h,但您的代码中头文件缺少尖括号(如 #include <stdio.h> 和 #include <math.h>)。
- void main() 不是标准写法,应改为 int main()。
- for 循环不完整:缺少循环条件、增量语句和循环体。
- 变量使用问题:k 被赋值为 sqrt(m),但 sqrt 返回浮点数,直接用于整数比较可能不精确。建议改用整数运算来优化。

以下是修正后的完整代码,用于求100-200之间的所有素数:


#include <stdio.h>

int main() {
    int m, i, is_prime;
    for (m = 100; m <= 200; m++) {
      is_prime = 1; // 假设m是素数
      for (i = 2; i * i <= m; i++) { // 用i*i避免浮点数运算
            if (m % i == 0) {
                is_prime = 0; // 如果能整除,不是素数
                break;
            }
      }
      if (is_prime == 1) {
            printf("%d ", m);
      }
    }
    return 0;
}


代码说明:
- 使用嵌套循环:外层循环遍历100到200的每个数,内层循环检查该数是否为素数。
- 内层循环从2开始,到 i*i <= m 结束,这比使用 sqrt(m) 更高效且避免浮点误差。
- 如果m能被任何i整除,则标记为非素数并跳出内层循环。
- 最后打印所有素数。

运行结果会输出100-200之间的所有素数,例如:101 103 107 ... 199。

如果还有问题,请随时追问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

pyzyd 发表于 2025-9-25 22:06:39

void main() {
    int k, m, i;
    m = 100;
    for (; m <= 200; m++) {
      k = sqrt(m);
      for (i = 2; i <= k; i++) {
            if (m % i == 0) {
                break;
            }
      }
      if (i > k) {
            printf("%d ", m);
      }
    }
    printf("\n");
}把k放到第一个循环里

林123456789 发表于 2025-9-27 20:33:56

void main() {
    int k, m, i;
    m = 100;
    for (; m <= 200; m++) {
      k = sqrt(m);
      for (i = 2; i <= k; i++) {
            if (m % i == 0) {
                break;
            }
      }
      if (i > k) {
            printf("%d ", m);
      }
    }
    printf("\n");
}
改成这样应该可以……

python大牢 发表于 2025-9-29 19:40:56

确实

但求过程001 发表于 6 天前

pyzyd 发表于 2025-9-25 22:06
把k放到第一个循环里

好的~~我看下哦~~感谢感谢

但求过程001 发表于 6 天前

林123456789 发表于 2025-9-27 20:33
void main() {
    int k, m, i;
    m = 100;


OKOK,感谢回复{:5_110:}
页: [1]
查看完整版本: 求100-200之间所有的素数