[Java]常规方法和筛法求解素数效率对比
来源:互联网 发布:淘宝退货赚运费险 编辑:程序博客网 时间:2024/05/18 18:04
package site.iknown.farm.test;public class Main{private static int isPrime(int n){for(int i=2;i<=Math.sqrt(n);i++){if(n%i == 0){return 0;}}return 1;}private static int normalPrimes(int n){int sum = 0;for(int i=2;i<n;i++){sum += isPrime(i);}return sum;}private static int betterPrimes(int n){int array[] = new int[n];for(int i=2;i<array.length;i++){array[i] = 1;}for(int i=2;i<array.length;i++){if(array[i] == 1){for(int j=2;i*j<array.length;j++){array[i*j] = 0;}}}int sum = 0;for(int i=2;i<array.length;i++){sum += array[i]; }return sum;}public static void main(String[] args){for(int i=2;i<10;i++){long normalStart = System.currentTimeMillis();int sum = normalPrimes((int)Math.pow(10, i));long normalEnd = System.currentTimeMillis();System.out.println("素数统计结果:"+"0-"+Math.pow(10, i));System.out.println("普通方法:");System.out.print(sum+"个");System.out.println((normalEnd - normalStart)+"毫秒");long betterStart = System.currentTimeMillis();int reSum = betterPrimes((int) Math.pow(10, i));long betterEnd = System.currentTimeMillis();System.out.println("筛法:");System.out.println(reSum+"个");System.out.println((betterEnd - betterStart)+"毫秒");}}}
运行分析:
数据范围比较小的时候两种方法差不多,但是对于数据范围比较大尤其是大于pow(10,5)时候,效率明显看出了不同。
阅读全文
1 0
- [Java]常规方法和筛法求解素数效率对比
- Java List遍历方法 及其效率对比
- Java List遍历方法 及其效率对比
- Java List遍历方法 及其效率对比
- java List遍历方法及效率对比
- Java List遍历方法 及其效率对比
- 筛法快速求解素数
- 素数与求解方法
- 素数的求解方法:
- Java的前置++和后置++效率对比
- 幻方常规求解方法汇总
- 求解素数几种方法
- java 遍历arrayList的四种方法及其效率对比
- Java遍历List四种方法的效率对比
- java 遍历arrayList的四种方法及其效率对比
- 关于BitmapData画图方法效率的测试和对比
- stringbuilder 的append方法 和String的+的效率对比
- C和Java效率对比试验和编译器优化影响
- Dubbo之旅-启动解析-扩展spirng标签-阿里SOA服务化治理方案
- poj 1700 Crossing River
- Java设计模式之七:建造者模式
- [Android] compile static binary
- GCD
- [Java]常规方法和筛法求解素数效率对比
- stm32f10x中必须知道的冷门知识
- Maven插件之mybatis-generator自动生成DAO层代码的插件
- Java程序与数据库连接
- React动画API之ReactTransitionGroup用法
- 深度信念网络
- HashSet
- 【C++】从标准输入中读取字符串
- Yii2实例化Model[两种方法]