這種方法就是將給出的數判斷能否找到處1以及它本身以外的因數。
**樣例
#include using namespace std;
bool f(int n)
return 1;
}int main()
埃氏篩法就是從2開始篩掉2的倍數(必須從2倍開始)往下依次進行。
**樣例
#include using namespace std;
const int 1e6;
bool book[maxn};
void is_not_prime(int n)
}}int main()
return 0;
}
尤拉篩法其實是對埃氏篩法的優化,在埃氏篩法中有多於3個因數的合數會被重複篩一次這樣增加了不必要的操作。尤拉篩則可以彌補這一不足之處(見下圖)
**樣例
#includeusing namespace std;
const int maxn = 1e7+10;
bool book[maxn];
int prime[maxn];
int cnt;
void init(int n)
for(int j = 0; j < cnt && prime[j]*i <= n; j++)
}}int main()
return res;
}ll mod_pow(ll a,ll b,ll n)
return res;
}bool miller_rabin(ll n)
for(i = 0;i < 10; i++)
if(x!=1)
return false;
}return true;
}int main()}}
return 0;
}
**樣例
#include using namespace std;
const int maxn = 1e6+10;
bool book[maxn];
int a[maxn];
void init(int n)
}else
a[i] = a[i-1];
}}int main()
}int ans = 0;
for(int i = 0;i <= r-l;i++)
if(book[i]==0)
ans++;
printf("%d\n",ans);
return 0;
}
素數判斷與素數篩選法
方法一 直接判斷,思想簡單,實現比較簡單,但是複雜度過高bool isprime int a return true 方法二 素數篩選法 eratosthenes 篩法 只有素數才能當篩子 篩掉對應的倍數,不超過要求的範圍即可 遍歷一遍 void getprime int n 從i i開始計算 j ...
判斷 篩選 素數
舉例 篩選從1 n的所有素數 第一種 暴力判斷,無優化。直接根據素數的定義判斷即可 include intmain for int i 2 i n i for int i 1 i n i if prime i printf d n i 第二種 素數的倍數一定不是素數,對其進行標記。最後遍歷一遍陣列,...
篩選法判斷素數
常規的判斷1 n以內的素數的時間複雜度為o n sqrt n 在n很大的時候時間很長,所以需要別的方法來判斷素數。這裡介紹篩選法。1 申請乙個陣列bool prime n 1 初始化所有的奇數下標為true,偶數下標為false 2例外 2 for int i 3 i sqrt n i 2 3 最後...