You need to enable JavaScript to run this app. 编写Java程序统计区间内含4个因数的RSA数时输出错误求指导
优惠活动
大模型
产品
解决方案
定价
更多

编写Java程序统计区间内含4个因数的RSA数时输出错误求指导

代码问题排查

逐行核对执行逻辑后,共有3处核心错误直接导致示例输入下的输出异常:

  • 因数计数器未按遍历数字重置
    原代码将numOfFactors = 2的初始化语句放在外层while循环外部,每处理完一个区间内的数字,计数器不会回到初始值,会持续累加之前的统计结果,全程无法匹配numOfFactors ==4的判断条件。
  • 内层判断条件冗余且截断统计范围
    遍历因数的if判断中额外加入number>=minimum && number<maximum的约束,本身外层循环已经把number的范围限定在[minimum, maximum]内,这个冗余条件既无必要,还会直接把等于区间上限的数字排除在统计外。比如示例输入的上限15,就会因为number<maximum(15<15)不成立,完全跳过因数统计。
  • 因数统计逻辑链路完全失效
    顺着示例输入11-15走完全程代码流程可以看到:计数器从初始值2开始不断累加,从未被重置,加上上限值被排除,全程不会触发RSA数的计数逻辑,最终输出结果为0。

修正后的可运行代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);    
        int minimum = in.nextInt();    
        int maximum = in.nextInt();    
        int numRSA = 0;
        // 遍历区间内的每一个数字
        for (int number = minimum; number <= maximum; number++) {
            // 为每个数字单独初始化因数计数:任意大于1的正整数天然包含1和自身两个因数
            int factorCount = 2;
            // 从2开始遍历到number的一半,统计其余因数
            for (int i = 2; i <= number / 2; i++) {
                if (number % i == 0) {
                    factorCount++;
                }
            }
            // 恰好拥有4个因数即判定为RSA数
            if (factorCount == 4) {
                numRSA++;
            }
        }
        System.out.println("The number of RSA numbers between " + minimum + " and " + maximum + " is " + numRSA);
    }
}

修正后运行示例输入11-15,程序会正确识别14、15两个符合要求的RSA数,输出结果为2,和预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 02:36:06