【演算法模板】尤拉篩法求素數
#include<iostream> using namespace std; const int MAXN=1000000+10; int n,cnt,prime[MAXN]; bool vis[MAXN]; void findprime(int n) { for(int i=2;i<=n;i++) { if(!vis[i])prime[++cnt]=i; for(int j=1;j<=cnt&&i*prime[j]<=n;j++) { vis[i*prime[j]]=true; if(i%prime[j]==0)break; } } } int main() { vis[1]=true; findprime(MAXN); cin>>n; if(!vis[n])cout<<"Yes"; else cout<<"No"; return 0; }
相關推薦
【演算法模板】尤拉篩法求素數
#include<iostream> using namespace std; const int MAXN=1000000+10; int n,cnt,prime[MAXN]; bool vis[MAXN]; void findprime(int n)
【模板】尤拉篩法(線性篩法)
1 int n; 2 int p[MAX_N], cnt; 3 bool b[MAX_N]; 4 5 void Euler() 6 { 7 b[0] = b[1] = 1; 8 for(register int i = 2; i <= n; ++i) 9
尤拉函式求法與尤拉篩法求素數
尤拉函式: 尤拉函式定義: 對於正整數n,尤拉函式Euler(n)是1到n-1中與n互質的數的個數,特別的,Euler(1) = 1,若n為質數則有 Euler(n) = n - 1 尤拉函式的兩種求法: 1.由定義和常識可以知道對
【模板】歐拉篩法(線性篩法)
urn col 情況 reg spa bre 歐拉篩法 () 需要 1 int n; 2 int p[MAX_N], cnt; 3 bool b[MAX_N]; 4 5 void Euler() 6 { 7 b[0] = b[1] = 1; 8
【演算法】3.Eratosthenes篩選法與尤拉篩選法求素數
Eratosthenes篩法 1.原理 一個合數可以分成幾個素數的和,如果把素數(最初只知道2)的倍數全都去掉,剩下的就都是素數了 2.思路分析 去除0,1(既不是素數又不是合數) 找到佇列中最小的素數,刪除其倍數 3.程式碼實現(只給出了函
BZOJ 2818: 尤拉篩法求gcd(x,y)==k(k為質數)
Description 給定整數N,求1<=x,y<=N且Gcd(x,y)為素數的 數對(x,y)有多少對. Input 一個整數N Output 如題 Sample Input 4 Sample Output 4 Hint
【模板】歐拉篩
ont euler pri sans nbsp mil rime clas == 歐拉好像是叫Euler不過還是叫oula更好聽... 1 void oula() { 2 memset(is_prime, 1, sizeof(is_prime));
【模板】埃氏篩法
bool p[MAX_N]; void Eratosthenes(int n) { p[0] = p[1] = 1; for(register int i = 2; i * i <= n; ++i) { if(p[i]) continue; for(register int j
【模板】尤拉函式
#include <iostream> using namespace std; int n; int ans; int main() { cin >> n; int last = ans = n; for(int i = 2; i * i <= n; i+
[模板]線性篩素數(尤拉篩法)
用途 $O(n)$處理出n以內所有素數 原理 使用 合數=最大因數(除1和本身外)*最小質因數 的原理來篩,每個數只會被篩一次 對於每個數i,令它是某數的最大因數,然後從小到大地找<=i的素數j,則i*j是合數 直到找到某個j使得$i\%j==0$,因為再往後的話,j'> i的某個因子,
【模板】尤拉定理(洛谷P5091)
https://ouuan.blog.luogu.org/solution-p5091 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> using
【P1865】篩法求素數+區間!
#include<bits/stdc++.h> using namespace std; const int maxn=1000010; bool a[maxn]; int primesum[maxn]; void printPrimes(){ memset(a,true,size
線性尤拉篩法
合數指自然數中除了能被1和本身整除外,還能被其他數(0除外)整除的數 時間複雜度O(n) 每個合數只會被他的最小的質因子篩去。 #include<iostream> #include<cmath> #include<cstring> usi
埃氏篩法和尤拉篩法的區別
Eratosthenes篩法(Sieve of Eratosthenes) 由於思想非常簡單,故只給出實現。 void eratosthenes_sieve(int n) { totPrimes = 0; memset(flag, 0, size
【模板】Jarris步進法求凸包
解析: 程式碼: #include<bits/stdc++.h> using namespace std; #define ll long long #define re regis
【演算法模板】二叉樹的三種遍歷方式,以及根據兩種遍歷方式建樹
前言:今年九月份的PAT考試就栽在這“兩種遍歷建樹”上了,剛好沒看,剛好考到。作為自己的遺憾,今日碼完,貼在這裡留個紀念,希望能給自己警醒與警鐘。 簡要概括: 1、二叉樹的三種遍歷方式分別是 先序(先根)遍歷PreOrder,中序(中根)遍歷InOrder,後序(後根
【演算法模板】拓撲排序
模板題: 獎金 Time Limit: 1000 ms Memory Limit: 128 MB Description 由於無敵的凡凡在2005年世界英俊帥氣男總決選中勝出,Yali Company總經理Mr.Z心情好,決定給每位員工發
【演算法模板】Floyd求最短路
#include<iostream> using namespace std; const int MAXN=100+10; const int INF=99999999; int n,m,s,t,g[MAXN][MAXN]; int main() {
【演算法模板】Tarjan求強連通分量
#include<iostream> #include<cstring> #include<stack> #include<vector> using namespace std; const int MAXN=1000+1
【演算法模板】並查集
模板題:親戚 #include<iostream> using namespace std; int n,m,p; int f[5001]; int find(int x) { if(f[x]==x)return x; elsereturn