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

请求协助:Java指定区间素数打印程序问题排查

嘿,我帮你排查下这段素数程序的问题哈~先看看你代码里的几个关键错误:

  • 内层循环范围完全错了:判断一个数i是不是素数,根本不需要循环到end,只需要检查到i的平方根(或者i/2)就行,循环到end纯属做无用功,还会搞乱判断逻辑。
  • 素数判断逻辑搞反了:你现在的逻辑是「只要i%j!=0就把i加到结果里」,但素数的定义是除了1和自己,没有其他因数——正确的逻辑应该是:如果存在任何一个j(2<=j<=sqrt(i))能整除i,那这个数就不是素数;只有当所有j都不能整除i时,它才是素数。而且你每次直接赋值res = i + " ",会把之前的结果全覆盖,最后只会留下最后一次循环的数,根本收集不到所有素数。
  • 没处理边界情况:比如如果传入的beg是1,1不是素数,但你的代码会把它纳入循环;还有像2这种最小的素数,你的内层循环会错误地去判断,导致它被漏掉。
  • 字符串拼接效率低还容易出错:直接用res = i + " "会覆盖之前的内容,应该用追加的方式,而且用StringBuilder比直接拼接字符串高效多了。

给你改好的代码,应该能满足你的需求:

package com.robin.practise;
import java.util.Scanner;

public class PrimebetweenRange {
    private static String Prime(int beg, int end) {
        StringBuilder res = new StringBuilder();
        // 素数从2开始,所以起始点取beg和2的最大值
        int start = Math.max(beg, 2);
        for (int i = start; i <= end; i++) {
            boolean isPrime = true;
            // 循环到i的平方根,减少计算量
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if (i % j == 0) {
                    isPrime = false;
                    break; // 找到因数直接跳出,不用继续判断
                }
            }
            if (isPrime) {
                res.append(i).append(" ");
            }
        }
        // 去掉末尾多余的空格,返回干净的结果
        return res.length() > 0 ? res.substring(0, res.length() - 1) : "";
    }

    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        System.out.println("Enter any two numbers: ");
        int n1 = scn.nextInt();
        int n2 = scn.nextInt();
        scn.close();
        System.out.println(Prime(n1, n2));
    }
}

给你解释下改了啥:

  1. 用StringBuilder来拼接结果,避免字符串拼接的性能问题,也不会覆盖之前的内容。
  2. 把循环起始点设为Math.max(beg, 2),直接跳过小于2的非素数。
  3. 内层循环优化到Math.sqrt(i),大大减少计算次数,提升效率。
  4. 用isPrime布尔变量来标记当前数是否为素数,找到因数就立刻跳出循环,避免无用计算。
  5. 最后处理结果字符串,去掉末尾多余的空格,返回的结果更规范。

测试一下你的例子:Prime(4,7)会返回5 7,Prime(7,16)会返回7 11 13,完全符合需求哦~

内容的提问来源于stack exchange,提问作者Rabindra Kumar Mahato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:24:19