埃氏筛法
素数就是除了1和本身之外没有其他的约数,所以有约数的都不是素数。
思路:
先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,……依此类推,最后剩下的就是素数。
如求100以内的素数,我们只要到去掉Math.aqrt(100)的倍数就可以了,这是因为10的2倍已经被2的倍数去掉了,10的3倍已经被3的倍数去掉了,所以到10的时候只剩下10的10倍以上的素数还存在。
同样的原因,我们在去掉3的倍数的时候,只要从3的3倍开始去掉就好了,因为3的2倍已经被2的倍数去掉了。
java实现
package com.cn;
import java.util.Scanner;
public class PrimeNumber {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
//输入n,表示求n以内的素数
int n = sc.nextInt();
IsPrime(n);
}
//求素数
public static void IsPrime(int n){
boolean[] mark = new boolean[n+1];
//用于标记,true表示是素数,false表示非素数
for(int i=2;i<=n;i++){
mark[i] = true;
}
for(int i=2;i<=Math.sqrt(n);i++){
if(mark[i] == true){
for(int j = i;j*i<=n;j++){
mark[i*j] = false;
}
}
}
int k=0;
for(int i = 2;i<=n;i++){
if(mark[i] == true){
k++;
System.out.print(i + " ");
if(k%10 == 0){
System.out.println();
}
}
}
}
}