Java判断101-200之间有多少个素数并输出
在编程领域,素数是指大于1且只有两个正因数(1和自身)的大于1的自然数。Java编程语言提供了处理数学问题的能力,包括判断一个数是否为素数。本示例代码主要展示了如何使用Java来判断101到200之间的所有素数,并将它们输出。 我们需要理解判断素数的基本方法。对于任何正整数n,如果它不能被2到√n之间的任何一个整数整除,那么n就是一个素数。这是因为如果n有因子,那么必然存在一个因子不大于√n,因为如果有一个因子大于√n,那么它的对应因子必定小于√n。所以,只需检查2到√n的整除性即可。 现在,让我们详细分析提供的代码: 1. 主类`exp2`包含主方法`main`,这是程序的入口点。在这里,一个循环遍历2到200的整数。对于每个数字i,它调用`mymath.iszhishu(i)`来检查i是否是素数。如果是,就打印出这个数。 2. `math`类包含两个方法: - `f(int x)`:这是一个斐波那契数列的递归实现,与素数判断无关,可能是一个遗留的错误或者之前的练习部分。 - `iszhishu(int x)`:这才是真正的素数判断方法。它首先检查特殊情况,即x是否为1或2,这两种情况都是素数。然后,对于大于2的数,它通过一个for循环从2到x/2进行迭代,如果x能被任何i整除,就返回false,表示x不是素数。如果循环结束都没有找到因子,那么返回true,表示x是素数。 需要注意的是,`iszhishu`方法中的循环条件可以优化为`i <= Math.sqrt(x)`,这样可以减少计算量,因为不需要检查到x/2。同时,当检查到i * i > x时,就可以跳出循环,因为更大的i不可能是x的因子。 现在,让我们用优化后的代码替换原始的`iszhishu`方法: ```java public class Exp2 { public static void main(String[] args) { int count = 0; MathUtil mathUtil = new MathUtil(); for (int i = 101; i <= 200; i++) { if (mathUtil.isPrime(i)) { System.out.println(i); count++; } } System.out.println("101到200之间共有 " + count + " 个素数"); } } class MathUtil { public boolean isPrime(int x) { if (x <= 1) { return false; } if (x == 2 || x == 3) { return true; } if (x % 2 == 0 || x % 3 == 0) { return false; } for (int i = 5; i * i <= x; i += 6) { if (x % i == 0 || x % (i + 2) == 0) { return false; } } return true; } } ``` 在这个优化的版本中,我们添加了一个计数器`count`来记录素数的数量,并在循环结束后输出总数。此外,`isPrime`方法中我们先检查了2和3这两个特殊的素数,然后跳过了所有能被2和3整除的数,最后仅检查形如6k ± 1的数,这是所有素数的形式,进一步提高了效率。 运行这段代码,你会得到101到200之间所有素数的列表以及它们的总数。这不仅是一个基础的素数判断问题,也是对算法优化和代码效率理解的很好实践。