埃拉托色尼筛法求不大于n的质数序列
主要思想:
从2开始,将待选序列中2的倍数全部剔除,在此基础上,将3的倍数全部剔除,同时循环这个过程,到最后,得到的序列就是我们所要求的所有序列
Java代码实现:
public int[] findExponentNotGreaterThanN(int n){
/**
* 定义一个数组存储数字,并给数字都赋值
* */
int [] a=new int[n+1];
for (int i = 0; i <= n; i++) {
a[i]=i;
}
/**
*这里计算这个开方是很有必要的。详情待续见下方
*/
int t= (int) Math.sqrt(n);
/**
* 遍历从2到开方的那个数字
* */
for (int i = 2; i <= t; i++) {
if(a[i]!=0) {
int j = i * i;
while (j <= n) {
a[j] = 0;
j += i;
}
}
}
/**
* 这里就是纯计算一下一共有多少个质数
* */
int count=0;
for (int i = 2; i <= n; i++) {
if(a[i]!=0){
count++;
}
}
/**
* 将所有的质数都提取出来,返回提取好的那个数组。
* */
int [] re = new int[count];
int k=0;
for (int i = 2; i <= n; i++) {
if(a[i]!=0){
re[k++]=a[i];
}
}
return re;
}
- 详情基本上就这些。是一个比较好的方法求质数序列