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

请求修复theClosestPrimeNumber函数:邻近素数查找功能失效

问题分析与修复方案

首先,你的代码核心问题出在两个地方:isPrimeNumber函数的素数判断逻辑错误,以及theClosestPrimeNumber函数在寻找更小素数时的边界处理缺失,导致死循环或错误结果。

1. 修复isPrimeNumber函数

原函数错误地将0、1判定为素数,且遍历效率极低。素数的定义是大于1的自然数,除了1和自身外无其他因数,修正后的代码如下:

bool isPrimeNumber(int x) {
    // 小于等于1的数都不是素数
    if (x <= 1) {
        return false;
    }
    // 2是唯一的偶素数
    if (x == 2) {
        return true;
    }
    // 偶数直接排除(除了2)
    if (x % 2 == 0) {
        return false;
    }
    // 只需要检查到x的平方根,且只遍历奇数,大幅提升效率
    for (int i = 3; i * i <= x; i += 2) {
        if (x % i == 0) {
            return false;
        }
    }
    return true;
}

2. 修复theClosestPrimeNumber函数

原函数在寻找比x小的素数时,没有处理lower < 2的边界情况(比如x=1、0或负数),会导致死循环或返回错误的非素数。同时简化冗余变量,修正后的代码:

int theClosestPrimeNumber(int x) {
    // x本身是素数,直接返回
    if (isPrimeNumber(x)) {
        return x;
    }

    // 寻找比x大的第一个素数
    int higher = x + 1;
    while (!isPrimeNumber(higher)) {
        higher++;
    }

    // 寻找比x小的第一个素数,确保不小于最小素数2
    int lower = x - 1;
    while (lower >= 2 && !isPrimeNumber(lower)) {
        lower--;
    }

    // 若没有更小的素数(比如x<=2),直接返回更大的素数
    if (lower < 2) {
        return higher;
    }

    // 比较距离,返回更近的素数;距离相等时按原逻辑返回更大的素数
    int distLower = x - lower;
    int distHigher = higher - x;
    if (distLower > distHigher) {
        return higher;
    } else if (distLower < distHigher) {
        return lower;
    } else {
        return higher;
    }
}

关键修复点说明

  • 修正素数判断逻辑,避免将0、1误判为素数
  • 为寻找更小素数的循环添加lower >= 2的边界条件,防止死循环
  • 优化素数判断的遍历范围,从x-1缩小到sqrt(x),并只遍历奇数,提升性能
  • 简化冗余变量,让代码更易读

内容的提问来源于stack exchange,提问作者Tomasz Wiśniewski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:41:35