鱼C论坛

 找回密码
 立即注册
查看: 88|回复: 2

[已解决]4 是素数?哪出问题了?

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式

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

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

x
int i,num;
                _Bool flag = 1;
                printf("请输入一个数:");
                scanf("%d",&num);
        
                for ( i = 2; i < num / 2; i++){
                       if(num % i ==0){
                        flag = 0;
                       }
                }
                if(flag){
                        printf("%d是一个素数!\n",num);
                }
                else{
                        printf("%d不是一个素数!\n",num);
                }

        return 0;

}    
最佳答案
7 天前
for 循环的条件 i < num / 2 应该改为 i <= num / 2,因为如果 num 是偶数且大于2,那么 num / 2 可能是一个因子,而你的循环条件会漏掉这个情况。

应该这样:
#include <stdio.h>
int main() {
    int i, num;
    _Bool flag = 1;
    printf("请输入一个数:");
    scanf("%d", &num);
    if (num <= 1) {
        flag = 0;
    } else {
        for (i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                flag = 0;
                break;  
            }
        }
    }
    if (flag) {
        printf("%d是一个素数!\n", num);
    } else {
        printf("%d不是一个素数!\n", num);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 7 天前 | 显示全部楼层
你在判断素数的循环中,条件应该是 i <= num / 2,而不是 i < num / 2。另外,处理输入数字为2或更小的情况时,程序可能会出错。以下是修正后的代码:
#include <stdio.h>

int main() {
    int i, num;
    _Bool flag = 1;
    printf("请输入一个数:");
    scanf("%d", &num);

    if (num <= 1) {
        flag = 0;
    } else {
        for (i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                flag = 0;
                break;
            }
        }
    }

    if (flag) {
        printf("%d是一个素数!\n", num);
    } else {
        printf("%d不是一个素数!\n", num);
    }

    return 0;
}

这样修改后,可以正确判断一个数是否为素数。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层    本楼为最佳答案   
for 循环的条件 i < num / 2 应该改为 i <= num / 2,因为如果 num 是偶数且大于2,那么 num / 2 可能是一个因子,而你的循环条件会漏掉这个情况。

应该这样:
#include <stdio.h>
int main() {
    int i, num;
    _Bool flag = 1;
    printf("请输入一个数:");
    scanf("%d", &num);
    if (num <= 1) {
        flag = 0;
    } else {
        for (i = 2; i <= num / 2; i++) {
            if (num % i == 0) {
                flag = 0;
                break;  
            }
        }
    }
    if (flag) {
        printf("%d是一个素数!\n", num);
    } else {
        printf("%d不是一个素数!\n", num);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-23 19:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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