关于c语言程序判断是否为素数的问题

为什么下面的代码会判断出925这些数是素数?求解。

```c
#include<stdio.h>
#include<math.h>
int main()
{
    int su(int n),a;
    printf("shuru");
    scanf("%d",&a);
    if(su(a))
        printf("yes");

    else
        printf("no");
    return 0;


}
int su(int n)
{

    for(int i=2; i<=sqrt(n); i++)
    {
        if(n%i==0)



            return 0;
            else
                return 1;


    }


}


```

你的代码中的问题在于 su 函数只检查了 n 是否能被 2 整除,而没有进行后续的循环检查,因此对于一些合数(非素数)例如 9、25 等,也会输出 "yes"。

可以通过优化 su 函数,应该在循环中检查 n 能否被 2 到 $sqrt(n)$ 之间的数整除,如果能,说明 n 不是素数,返回 0;如果循环结束仍然没有找到能整除 n 的数,说明 n 是素数,返回 1。

下面是我修改后的代码如下所示:(可以参考)

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

int su(int n);

int main() {
    int a;
    printf("请输入一个整数:");
    scanf("%d", &a);
    if (su(a)) {
        printf("yes\n");
    } else {
        printf("no\n");
    }
    return 0;
}

int su(int n) {
    if (n <= 1) {
        return 0;
    }
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) {
            return 0;
        }
    }
    return 1;
}


修改如下,改动处见注释,供参考:

#include<stdio.h>
#include<math.h>
int main()
{
    int su(int n), a;
    printf("shuru:");
    scanf("%d", &a);
    if (su(a))
        printf("yes");
    else
        printf("no");
    return 0;
}
int su(int n)
{
    if (n < 4)  return n > 1;     // 修改
    for (int i = 2; i <= sqrt(n); i++)
    {
        if (n % i == 0)
            return 0;
        //else                   // 修改
        //    return 1;            // 修改
    }
    return 1;                    // 修改 
}

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7579016
  • 这篇博客你也可以参考下:关于C语言可变参数函数的写法及其应用
  • 你还可以看下c语言参考手册中的 c语言-成员访问与间接
  • 除此之外, 这篇博客: 基于c语言实现螺旋矩阵中的 简单的螺旋矩阵 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 最基本的就是定义一个二维数组,对其进行向右 向下 向左 向上的依次循环。

    1 2 3 4 5
    16 17 18 19 6
    15 24 25 20 7
    14 23 22 21 8
    13 12 11 10 9

  • 您还可以看一下 徐新帅老师的C语言--从初级到精实战视频教程课程中的 变量的概念小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    判断一个数是否是素数的C语言程序:

    #include <stdio.h>
    
    int is_prime(int n) {
        if (n <= 1) {
            return 0;
        }
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                return 0;
            }
        }
        return 1;
    }
    
    int main() {
        int n;
        printf("请输入一个正整数:");
        scanf("%d", &n);
        if (is_prime(n)) {
            printf("%d是素数\n", n);
        } else {
            printf("%d不是素数\n", n);
        }
        return 0;
    }
    

    判断一个数n是否是素数的步骤如下:

    1. 首先特判n<=1的情况,因为小于等于1的数都不是素数;
    2. 从2开始,枚举n的所有可能的因子,即从2到$\sqrt{n}$;
    3. 如果发现某个因子可以整除n,那么n就不是素数,直接返回0;
    4. 如果所有的因子都不能被整除,那么n就是素数,返回1。

    提示:素数,就是只能被1和它本身整除的正整数。