C语言求素数,输出的为啥一直是0啊。

输入10为啥输出的是0啊,我真崩溃了,不应该是1嘛,搞个素数都快哭了。

img

if那里z=0改为z==0 ,然后goto可以去掉,再增加对小于2的数的判断,最后如果标志b为1代表素数的话,其初始值改为1应该就可以了。

修改如下:

参考链接:


#include <stdio.h>


// https://baike.baidu.com/item/%E8%B4%A8%E6%95%B0/263515 
int susu(int begin){
    
    int a,b,z;
    b=1;  // 素数标志,默认begin=1,即是素数 
    
    if(begin<2){ // 小于2的数不是素数,返回0 
        return 0;
    
    }
        
     // 遍历2到begin-1 之间的所有数,如果区间内任意一个数可以整除begin,则begin不是素数,返回0 
   // 2是特例,不进入循环,但它是素数,返回b的默认值1
    for(a=begin-1;a>1;a--){ 
        z=begin%a;
        //printf("z=%d,begin=%d,a=%d\n",z,begin,a);
        if(z==0){  // 如果a可以整除begin,则素数标志b置0,表示begin不是素数,返回b的值 
            
            b=0;
            return b;
            
        }
    }
    
    return b;  // 如果区间内任意一个数不能整除begin,则begin是素数,返回1 

} 

int main(void){
    
    int a,z;
    scanf("%d",&z);
    a=susu(z);
    printf("%d",a);
    
    return 0;
}

img

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7628796
  • 这篇博客你也可以参考下:C语言 输入10个数,统计出并输出正数、负数和0的个数
  • 除此之外, 这篇博客: 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 写三个函数,1) 输入10个数,2)进行处理,3)输出10个数——C语言中的 1 概述 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
    写三个函数,1) 输入10个数,2)进行处理,3)输出10个数

  • 您还可以看一下 CSDN讲师老师的C语言精髓之编译过程视频教程课程中的 计算机的组成部分,栈内存的特点;画出内存图,引入指针的概念小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以回答关于如何在C语言中求素数的问题。

    求素数可以采用“筛法”,即在一个数组中将素数的倍数都标记为非素数,最终剩下的就是素数。下面是一个示例代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int n;
        printf("请输入一个正整数:");
        scanf("%d", &n);
        if (n <= 1) {
            printf("输入错误,只能输入大于1的正整数!");
            return 0;
        }
        char *isPrime = (char *)malloc(sizeof(char) * (n+1)); // 动态分配内存
        for (int i = 0; i <= n; i++) {
            isPrime[i] = 1; // 先假设所有数字都是素数
        }
        for (int i = 2; i <= n; i++) {
            if (isPrime[i]) { // 如果i是素数
                for (int j = i * 2; j <= n; j += i) { // 将i的倍数都标记为非素数
                    isPrime[j] = 0;
                }
            }
        }
        int count = 0;
        for (int i = 2; i <= n; i++) {
            if (isPrime[i]) {
                count++; // 统计素数的个数
            }
        }
        printf("1 ~ %d中共有%d个素数。\n", n , count);
        free(isPrime); // 释放内存
        return 0;
    }
    

    该代码使用了动态内存分配,先假设所有的数字都是素数(用1代表素数),然后从2开始遍历到n,如果找到了一个素数i,则将它的倍数都标记为非素数(用0代表非素数)。遍历完成后,再统计1~n中有多少个素数,最后释放内存。

    关于你输入10但输出为0的问题,可能是你代码中的问题。可以提供你的代码让我帮你检查。