埃拉托斯特尼筛法描述:
要得到自然数n以内的全部素数,必须把不大于的所有素数的倍数剔除,剩下的就是素数。
给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去......。
题目:
统计找出一千万以内,一共有多少质数
质数概念: 只能被1和自己整除的数
举例:
5只能被 1和5整除,所以是质数
8可以被2整除,所以不是质数
下面是用埃拉托斯特尼筛法的代码实现:
public static void main(String[] args) {
int Max = 10000000;
int result = 0;
long sum = 0;
boolean[] flag = new boolean[Max + 1];
for (int i = 1; i <= Max; i++) {
flag[i] = true;
}
for (int j = 2; j <= Math.sqrt(Max); j++) {
if (flag[j] == true) {
for(int k = j * j; k <= Max; k += j) {
flag[k] = false;
}
}
}
for (int i = 2; i <= Max; i++) {
if (flag[i] == true) {
result++;
sum += i;
}
}
System.out.println(result);
System.out.println(sum);
}