求比任一数小的所有素数算法

素数生成算法对比
本文对比了两种不同的素数生成算法。一种算法利用已知素数列表进行判断,另一种算法通过遍历小于根号i的所有整数来判断素性。通过对500万范围内的素数进行计算,展示了两种算法的时间效率和准确性。
package org.basic.test;import java.util.arraylist;import java.util.list;public class testprimer {	public static void main(string[] args) {		int scope = 5000000;		system.out.println("scope=" + scope);		testprimer tp = new testprimer();		long time1 = system.currenttimemillis();		list<integer> primers1 = tp.getprime1(scope);		long time2 = system.currenttimemillis();		list<integer> primers2 = tp.getprime2(scope);		long time3 = system.currenttimemillis();		system.out.println("算法一耗时:" + (time2 - time1) + " ms");		system.out.println(primers1.size());		//tp.print(primers1);		system.out.println("算法二耗时:" + (time3 - time2) + " ms");		system.out.println(primers2.size());		//tp.print(primers2);	}		public void print(list<integer> primers){		for(integer i : primers){			system.out.print(i + ", ");		}	}	public list<integer> getprime1(int number) {		list<integer> primes = new arraylist<integer>();		primes.add(2);		for (int i = 3; i <= number; i++) {			if (isprime1(primes, i)) {				primes.add(i);			}		}		return primes;	}	//只要i不能被比i小的所有素数整除i就是素数。	public boolean isprime1(list<integer> primes, int i) {		for (int prime : primes) {			if(prime * prime > i){				return true;			}			if (i % prime == 0) {				return false;			}		}		return true;	}	public list<integer> getprime2(int number) {		list<integer> primes = new arraylist<integer>();		primes.add(2);		for (int i = 3; i <= number; i++) {			if (isprime2(i)) {				primes.add(i);			}		}		return primes;	}		public boolean isprime2(int i) {		for (int j = 2; j < math.sqrt(i) + 1; j++) {			if (i % j == 0) {				return false;			}		}		return true;	}  }scope=5000000算法一耗时:2953 ms348513算法二耗时:7031 ms348513
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值