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

为何简易Java素数程序未统计1?修改c==3后输出异常原因

查找20以内素数的Java程序
public class HelloWorld { 
    public static void main(String []args) { 
        int c = 0; 
        int i,j; 
        for(i = 1; i <= 20; i++) { 
            for(j = 1; j <= i; j++) { 
                if(i % j == 0) { 
                    c = c+1; 
                } 
            } 
            if(c == 2) { 
                System.out.println("the prime number is: "+i); 
            } 
            c = 0; 
        } 
    } 
}

问题列表

  • 问题1:为何这段简易Java素数程序未将数字1统计为素数?
  • 问题2:若将程序中的判断条件c==2修改为c==3,程序输出4和9为素数,这是什么原因?

问题解答

问题1解答

咱们先从素数的数学定义说起:素数是大于1的自然数,且只能被1和它本身两个正整数整除。

再看这段程序的逻辑:它通过内层循环统计数字i的正因数个数c,当c==2时才判定为素数。当i=1时,内层循环里j只能取1,1%1==0成立,c的值会变成1。这时候判断c==2显然不成立,所以不会把1输出为素数。

刚好这也符合数学定义——1只有1个正因数,不符合素数需要两个正因数的要求,所以程序的逻辑是对的,没把1统计成素数。

问题2解答

当你把判断条件改成c==3时,程序的逻辑就变成了:找出有3个正因数的数,而不是找素数了。

咱们看输出的4和9:

  • 4的正因数是1、2、4,刚好3个;
  • 9的正因数是1、3、9,也刚好3个。

这类数有个特点:它们都是素数的平方。因为假设p是素数,那么p²的正因数只有1、p、p²这三个——素数本身只有两个因数,它的平方的因数就是这三个,不会再多了。所以程序输出的是这类有3个因数的数,而不是素数(素数只有2个因数)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:14:20