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

为何我的Java质数判断代码总是误判非质数为质数?

质数判断代码的逻辑错误分析与修正

核心错误点

  • 循环逻辑触发过早,未完成完整检查:在for循环里,只要第一次i=2时n%i≠0,就直接输出“Number is prime”并中断循环。比如输入9,9%2=1≠0,程序直接判定它是质数,但9明显是合数——因为还没检查到3这个因数。
  • 找到合数证据后未终止流程:当找到能整除n的i时,输出“不是质数”后没有跳出循环,后续循环可能再次进入else分支,导致矛盾输出。比如输入4,i=2时输出“不是质数”,但i=3时4%3≠0,又会输出“是质数”。
  • 边界场景处理不全:当n=2时,i < n的条件不成立,循环根本不会执行,此时没有任何输出;n=0或1的情况输出后,方法还会返回0,主方法又会打印这个返回值,造成冗余。
  • 返回值设计不合理:isprime方法的作用是判断质数,返回long类型完全没必要,应该用boolean来表示判断结果,逻辑更清晰。

修正后的代码

import java.util.Scanner;

public class PrimeChecker {

    static boolean isPrime(long n) {
        if (n <= 1) {
            return false;
        }
        // 优化:只检查到平方根即可,减少循环次数
        for (long i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println("Enter a number to check if it is prime:");
        Scanner sc = new Scanner(System.in);
        long a = sc.nextLong();
        if (isPrime(a)) {
            System.out.println("Number is prime");
        } else {
            System.out.println("Number is not prime");
        }
        sc.close();
    }
}

修正说明

  • 把返回类型改成boolean,让判断方法只负责返回结果,输出逻辑交给主方法,职责更明确。
  • 循环优化为检查到n的平方根,因为如果n有大于平方根的因数,必然对应一个小于平方根的因数,大幅减少循环次数。
  • 完善边界处理:n≤1直接返回false,n=2时循环不执行,直接返回true,符合质数定义。
  • 找到因数立即返回false,循环正常结束则返回true,逻辑严谨,不会出现矛盾输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:05:25