- import java.util.ArrayList;
- import java.util.List;
- /**
- * 判断一个数是否为素数:
- *
- * 质数:
- * 质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
- * 只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。
- * 1和0既非素数也非合数。合数是由若干个质数相乘而得到的。所以,质数是合数的基础,没有质数就没有合搜索数。
- *
- *
- * @author melox
- *
- */
- public class Integer {
- public static void main(String[] args) {
- primesShow(getPrimes(2,100));
-
- }
-
- /*这里用java.lang.Integer主要是因为我的类名和java自带的有冲突*/
- public static List<java.lang.Integer> getPrimes(int min,int max) throws IllegalArgumentException{
- /*参数不合法抛出异常*/
- if(min < 0)throw new IllegalArgumentException("参数min:"+min+"不合法!");
-
- if(min > max) throw new IllegalArgumentException("参数min:"+min+",不能大于max:"+max);
-
- /*确保min是从奇数开始*/
- if(min % 2 == 0) min++;
-
- /*新建一个集合用于容纳min到max范围中的素数*/
- List<java.lang.Integer> primes = new ArrayList<java.lang.Integer>();
-
- /*外层循环主要控制min到max范围中所有奇数*/
- while(min<=max)
- {
- int sqrt =(int)Math.sqrt(min); //求出当前数的据平方根
-
- int find = 2; //查找因数从2开始,小于等于当前数的平方根
-
- while(find++ <= sqrt)
- if(min % find==0)break; //找到因数,跳出循环
-
-
- if(find > sqrt) //没找到表示是素数
- primes.add(min);
-
- min+=2;
- }
-
- return primes;
-
- }
-
- /***
- * 打印所有素数
- * @param primes
- */
- public static void primesShow(List<java.lang.Integer> primes){
- for (java.lang.Integer integer : primes) {
- System.out.print(integer+",");
- }
- }
- }
复制代码 |