Java素数查找程序问题:输出含非素数+需添加素数计数器
解决Java素数程序的两个问题:错误输出非素数与添加素数计数器
问题1:输出混杂非素数的原因及修正
你的程序会输出非素数,核心问题是内层循环的起始值错误。当前内层循环从start(即5)开始检查因数,但判断素数需要验证目标数是否能被2到其平方根之间的任意整数整除——跳过2、3、4这些小因数,会导致像6、9这类能被小数字整除的数被误判为素数。
关键修正点:
- 内层循环从
2开始,覆盖所有可能的因数 - 优化循环终止条件到
Math.sqrt(i):若一个数存在大于其平方根的因数,必然对应一个小于平方根的因数,这样能减少循环次数,提升效率 - 用
boolean类型标记是否为素数,比int flag更直观
问题2:添加素数计数器
只需初始化一个计数变量,每次确认找到素数时自增,最后输出总数即可。
修正后的完整代码
package com.mycompany.test; public class Test { public static void main(String[] args) { int start = 5; int end = 98; int primeCount = 0; // 素数计数器 for (int i = start; i <= end; i++) { boolean isPrime = true; // 检查2到i的平方根之间的所有整数 for (int j = 2; j <= Math.sqrt(i); j++) { if (i % j == 0) { isPrime = false; break; // 找到因数后直接跳出循环,无需继续检查 } } if (isPrime) { System.out.println(i); primeCount++; // 找到素数时计数+1 } } System.out.println("找到的素数总数:" + primeCount); } }
运行该程序后,会正确输出5到98之间的所有素数,同时在最后打印出找到的素数总数量。
内容的提问来源于stack exchange,提问作者Spencer Schjoll
相关产品推荐
相关产品推荐

