1. 程式人生 > >埃氏篩法(求n以內有多少個素數)

埃氏篩法(求n以內有多少個素數)

cin algorithm memset fin lse mod pre 判斷 end

題目大意:給定整數n,請問n以內有多少個素數

思路:想必要判斷一個數是否是素數,大家都會了,並且可以在O(根號n)的復雜度求出答案,那麽求n以內的素數呢,那樣求就顯得有點復雜了,下面看一下這裏介紹的??氏算法

其實呢,就是求出第一個素數,然後把n以內它的倍數都刪掉就行了,很簡單。然後找下一個素數,同樣方法·····

看代碼

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include
<cmath> #include<math.h> #include<algorithm> #include<set> #include<queue> typedef long long ll; using namespace std; const ll mod=1e9+7; const int maxn=1e6+10; const int maxk=5e3+10; const int maxx=1e4+10; const ll maxe=1000+10; #define INF 0x3f3f3f3f3f3f #define Lson l,mid,rt<<1 #define
Rson mid+1,r,rt<<1|1 int n; int prime[maxn]; bool is_prime[maxn]; void solve() { int sum=0; memset(is_prime,false,sizeof(is_prime)); is_prime[0]=is_prime[1]=true; for(int i=2;i<=n;i++) { if(!is_prime[i]) { prime[sum++]=i; for(int j=i*2
;j<=n;j+=i) { is_prime[j]=true; } } } cout<<sum<<endl; } int main() { cin>>n; solve(); return 0; }

埃氏篩法(求n以內有多少個素數)