鱼C论坛

 找回密码
 立即注册
查看: 34|回复: 6

求100-200之间所有的素数

[复制链接]
发表于 昨天 21:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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");
}

这是我学习线上视频后打的一段程序,运行没问题,但是我发现好像里面有不是素数的数字,请问一下我这个程序哪里有错误~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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


  1. #include <stdio.h>

  2. int main() {
  3.     int m, i, is_prime;
  4.     for (m = 100; m <= 200; m++) {
  5.         is_prime = 1; // 假设m是素数
  6.         if (m <= 1) {
  7.             is_prime = 0; // 处理m<=1的情况
  8.         } else {
  9.             for (i = 2; i * i <= m; i++) { // 检查从2到sqrt(m)的因数
  10.                 if (m % i == 0) {
  11.                     is_prime = 0; // 发现因数,不是素数
  12.                     break;
  13.                 }
  14.             }
  15.         }
  16.         if (is_prime) {
  17.             printf("%d ", m); // 输出素数
  18.         }
  19.     }
  20.     return 0;
  21. }
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 21:38 | 显示全部楼层
能否帮我看下我那个程序哪里不对了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 21:39 | 显示全部楼层
但求过程001 发表于 2025-09-25 21:38
能否帮我看下我那个程序哪里不对了。。。


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

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

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

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


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

  3. int main()
  4. {
  5.     int m, i, is_prime;
  6.     for (m = 100; m <= 200; m++) {
  7.         is_prime = 1; // 假设m是素数
  8.         if (m <= 1) {
  9.             is_prime = 0; // 小于等于1的数不是素数
  10.         } else {
  11.             for (i = 2; i <= sqrt(m); i++) {
  12.                 if (m % i == 0) {
  13.                     is_prime = 0; // 能被整除,不是素数
  14.                     break;
  15.                 }
  16.             }
  17.         }
  18.         if (is_prime) {
  19.             printf("%d\n", m);
  20.         }
  21.     }
  22.     return 0;
  23. }
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 21:52 | 显示全部楼层
#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素数哪里不对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 21:53 | 显示全部楼层
但求过程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之间的所有素数:


  1. #include <stdio.h>

  2. int main() {
  3.     int m, i, is_prime;
  4.     for (m = 100; m <= 200; m++) {
  5.         is_prime = 1; // 假设m是素数
  6.         for (i = 2; i * i <= m; i++) { // 用i*i避免浮点数运算
  7.             if (m % i == 0) {
  8.                 is_prime = 0; // 如果能整除,不是素数
  9.                 break;
  10.             }
  11.         }
  12.         if (is_prime == 1) {
  13.             printf("%d ", m);
  14.         }
  15.     }
  16.     return 0;
  17. }
复制代码


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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 22:06 | 显示全部楼层
  1. void main() {
  2.     int k, m, i;
  3.     m = 100;
  4.     for (; m <= 200; m++) {
  5.         k = sqrt(m);
  6.         for (i = 2; i <= k; i++) {
  7.             if (m % i == 0) {
  8.                 break;
  9.             }
  10.         }
  11.         if (i > k) {
  12.             printf("%d ", m);
  13.         }
  14.     }
  15.     printf("\n");
  16. }
复制代码
把k放到第一个循环里

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-26 05:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表