欧拉函数

欧拉筛素数+求欧拉函数

泪湿孤枕 提交于 2020-02-28 11:24:55
线性筛法 prime记录素数,num_prime素数下标 它们保证每个合数只会被它的最小质因数筛去 a[0]=a[1]=1; for(int i=2;i<=n;i++) { if(!a[i]) prime[num_prime++]=i; for(int j=0;j<num_prime&&i*prime[j]<=n;j++) { a[i*prime[j]]=1; if(!(i%prime[j])) break; } } } 欧拉函数 是 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。 通式: 其中p1, p2……pn为x的所有质因数,x是不为0的整数。 φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。 注意:每种质因数只一个。 比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4 若n是质数p的k次幂, ,因为除了p的倍数外,其他数都跟n互质。 设n为正整数,以 φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值 φ:N→N,n→φ(n)称为欧拉函数。 欧拉函数是积性函数——若m,n互质, 特殊性质:当n为奇数时, , 证明与上述类似。 若n为质数则 #include<cstdio> #include<cstring> #define MAXN 100005 #define MAXL 1299710

互质与欧拉函数

落爺英雄遲暮 提交于 2020-02-26 14:50:06
目录 目录地址 上一篇 下一篇 互质 我们定义两个正整数 \(a,b\) ,若 \(a,b\) 的最大公因数为 \(1\) 对这类特殊的数对,我们称呼为互质 即 \(a,b\) 互质 \(\Leftrightarrow gcd(a,b)=1\) 简化剩余类 考虑 \(n\) 的 \(m\) 个剩余类,其中对于所有与 \(n\) 互质的剩余类称为简化剩余类 可以证得,简化剩余类的数量为 \(\displaystyle \sum_{i=1}^n[gcd(i,n)=1]\) 我们从每个剩余类中抽出一个数,分别命名为 \(a_{1\cdots m}\) 易得到 \(\forall 1\leq i\leq m,gcd(a_i,n)=1\) 欧拉函数 欧拉函数 \(\boldsymbol \varphi(n)\) 定义为:小于等于 \(n\) 的正整数中,与 \(n\) 互质的数的个数 我们引入符号 \([condition]\) 为一个值:当 \(condition\) 为真时,值为 \(1\) ;否则为 \(0\) 因此可以这么写: \(\displaystyle \boldsymbol\varphi(n)=\sum_{i=1}^n[gcd(i,n)=1]\) 欧拉函数的性质 首先,根据定义,不难得出 \(\boldsymbol\varphi(1)=1\) 而根据质数的定义,还容易得出 \

[算进] BZOJ 2818(欧拉函数)

情到浓时终转凉″ 提交于 2020-02-10 14:41:56
Problem ACwing 题目地址 BZOJ 题目地址 Solution 一眼莫反, 许多年前好像用莫反做过 。但是在其他大佬的博客里Get到了一种用欧拉函数的快速算法,写一下。 定理 \[\sum_{i=1}^n \sum_{j=1}^n [gcd(i,j)=1] = (\sum_{i=1}^n 2*φ(i)) - 1\] 很好理解。减去的 \(1\) 是多算的一个 \((1,1)\) 。 让后就可以切爆这题了。 Code Talk is cheap.Show me the code. #include<bits/stdc++.h> #define int long long using namespace std; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); } return x * f; } const int N = 1e7+7; int n,tot,ans; int phi[N],p[N],sum[N]; bool vis[N]; void MakePhi() {

欧拉函数和欧拉定理

好久不见. 提交于 2020-01-31 15:33:41
欧拉函数和欧拉定理 参考: 欧拉函数 欧拉函数: 欧拉函数,即 \(\varphi(n)\) ,表示的是小于等于 \(n\) 和 \(n\) 互质的数的个数。 比如 \(\varphi(1)=1\) 。 利用唯一分解定理,我们可以把一个整数唯一地分解为质数幂次的乘积, 设 \(n=p_1^{k_1}p_2^{k_2}...p_s^{k_s}\) ,其中 \(p_i\) 是质数,那么 \(\varphi(n)=n\times\prod_{i=1}^s\frac{p_i-1}{p_i}\) int phi(int n) { int ans=n; for(int i=2;i*i<=n;++i) if(n%i==0){ ans-=ans*i; while(n%i==0) n/=i; } if(n>1) ans-=ans*i; return ans; } 欧拉函数的性质: ①欧拉函数是积性函数: 如果有 \(gcd(a,b)=1\) ,那么 \(\varphi(a\times b)=\varphi(a)\times \varphi(b)\) 特别的,当 \(n\) 为奇数时, \(\varphi(2n)=\varphi(n)\) ② \(n=\sum_{d|n}\varphi(d)\) 即表示, \(n\) 的所有因子的欧拉函数的值加起来为 \(n\) ③如果 \(gcd(k,n)=d\)

【模板】【数学】欧拉函数

坚强是说给别人听的谎言 提交于 2020-01-30 23:00:41
原文链接: https://blog.csdn.net/on_the_road344/article/details/45178243 对于正整数n,φ(n)是小于或等于n的正整数中,与n互质的数的数目; 欧拉函数就是用来求这个的。 公式: φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))…..(1-1/p(n)) 其中p(1),p(2)…p(n)为x 的所有质因数;x是正整数; φ(1)=1(唯一和1互质的数,且小于等于1)。注意:每种质因数只有一个。 有两种方法求,一种直接求,一种线性求。 1 //直接求解欧拉函数 2 int euler(int n){ //返回euler(n) 3 int res=n,a=n; 4 for(int i=2;i*i<=a;i++){ 5 if(a%i==0){ 6 res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出 7 while(a%i==0) a/=i; 8 } 9 } 10 if(a>1) res=res/a*(a-1); 11 return res; 12 } 13 14 //筛选法打欧拉函数表 15 #define Max 1000001 16 int euler[Max]; 17 void Init(){ 18 euler[1]=1; 19 for(int i=2;i

欧拉函数

a 夏天 提交于 2020-01-24 01:02:27
$\phi(n)$即小于n且与n互素的整数个数。 由容斥定理可得公式: $\phi(n)=\sum_{S\subseteq {\left \{ p_{1},p_{2},...,p_{k} \right \}}}(-1)^{\left | S \right |}\frac{n}{\prod_{p_{i}\in S}p_{i}}$ 可经过化简得: $\phi(n)=n(1-\frac{1}{p_{1}})(1-\frac{1}{p_{2}})\cdots (1-\frac{1}{p_{k}})$ 单个求法: int euler_phi(int n) { int m = (int)sqrt(n + 0.5); int ans = n; for(int i = 2; i <= m; i++) if(n % i == 0) { ans = ans / i * (i - 1); while(n % i == 0) n /= i; } if(n > 1) ans = ans / n * (n - 1); return ans; } 求1~n中所有数的欧拉函数值(类似素数筛法): void phi_table(int n){ for(int i = 2; i <= n; i++) phi[i] = 0; phi[1] = 1; for(int i = 2; i <= n; i++) if(!phi

欧拉函数

╄→гoц情女王★ 提交于 2020-01-08 21:22:23
什么是欧拉函数 欧拉函数是小于x的整数中与x互质的数的个数,特殊的 φ(1) = 1. 如何计算欧拉函数 其中p1,p2,.....pn为x的所有质因数,x是正整数。 欧拉函数的几个性质 1、对于质数p φ ( p ) =p-1. 2、若p为质数,n = p k ,则 φ(n) = p k - p k-1 3、欧拉函数是积性函数,但不是完全积性函数(不互质也满足等式)。若m,n互质,则φ(m*n)=φ(m)*φ(n). 4、当n>2时,φ(n)* n / 2 (n > 1). 5、小于n且与n互质的数的总和为:φ(n)* n / 2 (n > 1). 6.n = ∑ d ∣ n φ(d),即n的因数(包括1和它自己)的欧拉函数之和等于n 求欧拉函数 1、 求单个欧拉函数 int euler(int n) { int ans = n ; for(int i = 2 ; i * i <= n ; i++) { if(n % i == 0) { ans -= ans / i ; // 保证6不被2、3筛掉两次 while(n % i == 0)//确保i为n的质因数 { n /= i ; } } } if(n > 1) ans -= ans/n ;//最后可能还剩下一个质因数没有除 return ans ; } 2、 埃拉托斯特尼筛求欧拉函数 void euler(int n)//求1

欧拉函数与欧拉定理

跟風遠走 提交于 2019-12-27 04:06:40
欧拉函数 φ ( n ) o r ϕ ( n ) \varphi(n) or \phi(n) φ ( n ) o r ϕ ( n ) 表示小于n的正整数与n互质的数的个数. 显然有: 当n为质数时 φ ( n ) \varphi(n) φ ( n ) 当n为奇数时 φ ( 2 n ) = φ ( n ) \varphi(2n) = \varphi(n) φ ( 2 n ) = φ ( n ) 证明: ∵ \because ∵ 欧拉函数为积性函数. ∴ φ ( 2 n ) = φ ( 2 ) ∗ φ ( n ) \therefore \varphi(2n) = \varphi(2) \ast \varphi(n) ∴ φ ( 2 n ) = φ ( 2 ) ∗ φ ( n ) ∵ φ ( 2 ) = 1 \because \varphi(2)=1 ∵ φ ( 2 ) = 1 ∴ φ ( 2 n ) = φ ( n ) \therefore \varphi(2n) = \varphi(n) ∴ φ ( 2 n ) = φ ( n ) 欧拉函数通项公式 φ ( n ) = n ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) ( 1 − 1 p 3 ) . . . ( 1 − 1 p k ) \varphi (n)= n (1 - \frac {1} {p_1})(1 -

[学习笔记]约数&欧拉函数

*爱你&永不变心* 提交于 2019-12-14 14:22:01
约数 一.概念 约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。 二.性质 1.整数唯一分解 1)定义   对于任意一个正整数N,都有 N=p1 c1 *p2 c2 ...p m cm ,其中p为质数。 2)正约数集合    ={p 1 b1 *p 2 b2 *...p m bm |0<=bi<=ci}   3)正约数的和    f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)   4)正约数的个数    =(c1+1)(c2+1)...(cm+1) 三.算法   1.正约数集合     1)试除法。一个一个试看能否被整除。推论:N的约数个数最多为2√N个   2.1~N中所有数字的正约数     1)试除     2)基本推论:i一定是i的倍数的约数 for(int i=1;i<=n;++i){ for(int j=1;j<=n/i;++j){ fac[i*j].push_back(i); } } View Code      时间复杂度NlnN     3)例题1 反质数 题解      例题2 余数之和 题解 欧拉函数 一.概念   对正整数n

欧拉函数

我们两清 提交于 2019-12-09 13:10:47
在数论,对正整数n,欧拉函数是少于或等于n的数中与n 互质 的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、 φ函数 、欧拉 商数 等。 例如φ(8)=4,因为1,3,5,7均和8 互质 。——————欧拉函数的定义 ---φ函数的值  通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有 质因数 ,x是不为0的整数。φ(1)=1(唯一和1 互质 的数(小于等于1)就是1本身)。 ( 注意:每种质因数只一个。比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4 ) ---若n是质数p的k次幂, φ(n)=p^k-p^(k-1)=(p-1)p^(k-1) -1 ,因为除了p的倍数外,其他数都跟n互质。 (证明:P^k有p*p*p....*p个p,共P^k个p) 设n为正整数,以 φ(n)表示不超过n且与n 互素 的正整数的个数,称为n的欧拉函数值,这里函数φ:N→N,n→φ(n)称为欧拉函数。 ----与N互质所有数的和:sum=n*φ(n)/2;//因为所有大于2的欧拉函数值都是偶数,所以/不会丢失数据 ----欧拉函数的证明: --容斥原理: A∪B∪C = A+B+C - A∩B - B∩C - C∩A +A∩B∩C