Gankdudu 发表于 2025-2-16 11:48:58

4 是素数?哪出问题了?

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;

}   

FishC 发表于 2025-2-16 11:49:06

你在判断素数的循环中,条件应该是 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 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2025-2-16 12:50:26

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;
}
页: [1]
查看完整版本: 4 是素数?哪出问题了?