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

Java求最大质因数程序输出错误问题排查

问题分析与修复方案

嘿,我帮你排查下代码里的问题,输入14输出1确实是因为几个关键逻辑搞反或者写错了:

  • 因数判断完全写反了:你代码里的if(n%i != 0)是在找不能整除n的数(也就是非因数),但我们需要的是能整除n的因数啊!应该改成if(n%i == 0)。就拿14来说,7是它的因数,当i=7时14%7==0,但原来的代码直接跳过了这个i,根本没机会判断它是不是质数。
  • 质数判断逻辑错误:你现在的质数判断是遍历j从1到c-1,只要c%j==0就把j赋值给p,最后拿p去比max。但比如c=7的时候,j=1就满足7%1==0,p被设为1,后面的j都不满足,所以p一直是1,这显然不对。正确的质数判断应该是:一个大于1的数,除了1和它本身,没有其他因数。我们可以遍历2到√c的数,只要有一个能整除它,就不是质数。
  • 循环范围漏掉了n本身:你的外层循环是i=1;i<n;i++,如果输入的n本身是质数(比如输入7),这个循环根本找不到它,因为i到6就结束了,应该改成i=1;i<=n;i++(或者更高效的i<=n/2,不过先保证逻辑正确)。
  • max的更新时机不对:你在质数判断的循环里每次都更新max,这会导致把非质数的因数(比如1)也当成候选,应该等确定某个因数是质数之后,再去比较更新max。

下面是修正后的代码,我加了详细注释:

import java.util.Scanner; 
public class Problem3 { 
    public static void main(String[] args) { 
        Scanner sc = new Scanner(System.in); 
        System.out.println("Enter the number"); 
        int n = Integer.parseInt(sc.next()); 
        int maxPrime = 0; 

        // 遍历所有可能的因数,从1到n
        for(int i=1;i<=n;i++) { 
            // 先判断i是不是n的因数
            if(n%i == 0) { 
                boolean isPrime = true;
                // 处理特殊情况:1不是质数
                if(i <= 1) {
                    isPrime = false;
                } 
                // 2是唯一的偶质数
                else if(i == 2) {
                    isPrime = true;
                } 
                // 大于2的数,检查从2到sqrt(i)是否有因数
                else {
                    for(int j=2;j<=Math.sqrt(i);j++) {
                        if(i%j == 0) {
                            isPrime = false;
                            break; // 找到因数就直接跳出,不用继续判断
                        }
                    }
                }
                // 如果当前因数是质数,且比记录的最大质数大,就更新
                if(isPrime && i > maxPrime) {
                    maxPrime = i;
                }
            }
        } 
        System.out.println(maxPrime); 
        sc.close(); 
    } 
}

测试输入14的话,会找到因数1、2、7、14,其中质数是2和7,最大的就是7,符合你的预期啦。另外,要是想优化性能,可以把外层循环改成i<=n/2,因为大于n/2的因数只有n本身,这样能减少循环次数~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:31:53