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

C语言实现欧拉函数输出为0,如何修改is_coprime与euler函数?

问题排查与修正方案

你的代码存在三个核心问题,仅调整is_prime(原计划命名is_coprime)和euler函数即可解决:

  • is_prime函数无返回值:函数声明为int返回类型,但未写return语句,调用时返回随机值,永远不满足等于1的判断条件,导致sum始终为0
  • 互质判断逻辑缺失:欧几里得算法执行完成后,最终变量m是两数的最大公约数,需要返回m == 1的布尔结果作为互质判断依据
  • euler函数遍历起始值错误:欧拉函数统计的是1到n范围内和n互质的正整数个数,你从i=0开始遍历无意义,应调整起始值为1

修正后的代码(仅调整两个目标函数,main函数完全不变)

#include <stdio.h> 

int is_prime(int m, int n) {
  int r;
  while (n > 0) {
    r = m % n;
    m = n;
    n = r;
    if (m == 1)
      break;
  }
  // 补充互质判断返回逻辑
  return m == 1 ? 1 : 0;
}

int euler(int n) {
  int i;
  int sum = 0;
  // 调整遍历起始值为1
  for (i = 1; i <= n; i++) {
    if (is_prime(i, n) == 1)
      sum += 1;
  }
  return sum;
}

main() {
  int i;
  for (i = 2; i <= 10; i++) {
    printf("euler(%d) = %d\n", i, euler(i));
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:15:01