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

Java指定范围内质数查找程序异常求助:输入1-20仅输出1、2、3

解决质数范围查找程序的输出异常问题

问题根源分析

你的代码存在两个核心问题,导致输出异常:

  1. 标记变量fl定义在外部循环外,一旦被设为1后不会自动重置,后续所有数字的判断都会错误沿用这个标记值。
  2. 错误将1判定为质数,不符合质数的定义(质数是大于1的自然数,且仅能被1和自身整除)。

修正后的代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter the range : ");
        int n1 = sc.nextInt();
        int n2 = sc.nextInt();
        
        for (int i = n1; i < n2; i++) {
            // 每个数字判断前重置标记
            int fl = 0;
            // 跳过小于2的数(非质数)
            if (i < 2) {
                continue;
            }
            // 优化内层循环:只需遍历到sqrt(i),减少无效计算
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if (i % j == 0) {
                    fl = 1;
                    break; // 找到因数后直接终止循环,提升效率
                }
            }
            if (fl == 0) {
                System.out.println(i);
            }
        }
        sc.close(); // 关闭输入流,规范资源管理
    }
}

关键修改说明

  • 将fl的声明移至外层循环内部,确保每次判断新数字时标记都从0开始。
  • 添加i < 2的判断逻辑,直接跳过1及更小的数,避免错误输出。
  • 内层循环优化为遍历到Math.sqrt(i):若数字i存在大于其平方根的因数,必然对应一个小于平方根的因数,以此减少循环次数。
  • 找到因数后立即break内层循环,无需继续无效判断。

测试输入1到20时,正确输出为:

2
3
5
7
11
13
17
19

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:54:09