为何简易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
相关产品推荐
相关产品推荐

