时间复杂度 O(sqrt(n))spa
代码:code
static boolean prime(int n){ if(n < 2) return false; for(int i = 2; i <= n/i; i++){//由于i能被整除,那么n/i确定也能被n整除 if(n % i == 0) return false; } return true; }
合数只会被它的最小质因子筛掉blog
时间复杂度:O(n)get
static final int N=; static int prime[]=new int[N]; static boolean vis[]=new boolean[N]; static int cnt=0; static void get_primes(int n){ for(int i=2;i<=n;i++){ if(!vis[i]) prime[cnt++]=i; for(int j=0;j<cnt && prime[j]*i<=n;j++){ vis[i*prime[j]]=true; if(i%prime[j]==0) break;//prime[j]是i的最小质因子,那么prime[j]确定也是i*prime[j]的最小质因子 } } }
时间复杂度: O(n*loglogn)在N=10^6,时间和线性欧拉筛法差很少,可是10^7线性欧拉筛法就快了一倍class
一个数为素数,那么它的倍数确定不是素数im
代码:static
static final int N=; static int prime[]=new int[N]; static boolean vis[]=new boolean[N]; static int cnt=0; static void get_primes(int n){ for(int i=2;i<=n;i++){ if(!vis[i]){ vis[i]=true; prime[cnt++]=i; for(int j=i+i;j<=n;j+=i) vis[j]=true; } } }