You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

素数检测程序改为long类型后所有自然数均被判定为非素数的问题

素数检测程序改为long类型后全部判定非素数的解决方法

你遇到的问题核心是没有同步修改所有关联的类型与格式符,导致类型不匹配引发逻辑异常。以下是修正后的完整代码,以及关键修改点说明:

修正后的代码

#include<stdio.h>

// 同步修改函数参数为long类型
int check_prime(long);

int main()
{
   long n; // 将存储输入的变量改为long类型
   int result;

   printf("Enter an integer to check whether it is prime or not.\n");
   scanf("%ld", &n); // 格式符从%d改为%ld,匹配long类型输入

   result = check_prime(n);

   if (result == 1)
      printf("%ld is prime.\n", n); // 输出格式符同步改为%ld
   else
      printf("%ld is not prime.\n", n);

   return 0;
}

int check_prime(long k) // 参数k改为long类型,确保接收正确的数值
{
   if(k == 1){
       return 0;
   }
   long c; // 循环变量改为long,避免大数值时int溢出导致循环异常

   // 原循环逻辑可保留,也可优化为c*c <= k提升效率
   for (c = 2; c <= k - 1; c++)
   { 
      if (k % c == 0)
         return 0;
   }
   return 1;
}

关键修改点说明

  • 变量类型同步:将输入变量n、函数参数k、循环变量c统一改为long,避免类型截断或溢出。
  • 格式符匹配:输入输出的格式符从%d改为%ld,确保long类型数值能正确读取和打印,这是导致全非素数判定的常见原因——格式符不匹配会让输入值读取异常。
  • 循环变量类型:当检测超大的long型数值时,int类型的循环变量会溢出为负数,导致循环条件始终成立,最终错误返回非素数结果。

内容的提问来源于stack exchange,提问作者bosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:46:07