判断101-200之间有多少个素数,并输出所有素数。
算法一:
public class ArithmeticTest2 { public static void main(String[] args){ long start=System.currentTimeMillis(); for(int i=2;i<=1000000;i++) if (isPrime(i)) {// 调用isPrime()方法 System.out.println(i + "是素数!");// 若isPrime()方法返回true,输出是素数 } long end=System.currentTimeMillis(); System.out.println("运行时间:"+(end-start)); } /** * <pre> * 用于判断一个数是否为素数,若为素数,返回true,否则返回false * </pre> * * @param a * 输入的值 * @return true、false */ public static boolean isPrime(int a) { boolean flag = true; if (a < 2) {// 素数不小于2 return false; } else { for (int i = 2; i <= Math.sqrt(a); i++) { if (a % i == 0) {// 若能被整除,则说明不是素数,返回false flag = false; break;// 跳出循环 } } } return flag; } }
算法二:
public class ArithmeticTest2_1 { public static void main(String[] args){ long start=System.currentTimeMillis(); for(int i=2;i<=1000000;i++){ if (isPrime(i)) {// 调用isPrime()方法 System.out.println(i + "是素数!");// 若isPrime()方法返回true,输出是素数 } i=i+2; //过滤所有偶数 } long end=System.currentTimeMillis(); System.out.println("运行时间:"+(end-start)); } public static boolean isPrime(int a) { boolean flag = true; if (a < 2) {// 素数不小于2 return false; } else { for (int i = 2; i <= Math.sqrt(a); i++) { if (a % i == 0) {// 若能被整除,则说明不是素数,返回false flag = false; break;// 跳出循环 } } } return flag; } }
算法二的执行速度比算法一快了一倍。大家还有没有什么好的算法求推荐。