编写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
相关产品推荐
相关产品推荐

