欧拉函数

本原元的定义

冷暖自知 提交于 2019-11-30 11:11:18
1、准备步骤 1)首先理解质数的定义 质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。 2)了解欧拉函数 对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目,因此一个素数的欧拉函数为其本身的值减一,即当 p 为素数时,φ(p) = p-1。 2、本原元的定义 模 n 下 a 的阶 m = φ(n),m 就是 n 的本原元 3、举例 参考文档: 1)https://wenku.baidu.com/view/48fa2f315022aaea988f0f32.html 来源: https://www.cnblogs.com/GjqDream/p/11581094.html

欧拉函数模板

那年仲夏 提交于 2019-11-30 08:08:59
洛谷P3601 签到题 数论里面,对于 l 和 r 很大,r-l 范围又很小的时候,都用到了用一个数组x[ i ]表示 i+l 的值,也就是把 l~r 这个区间对应到 0~l-1 中了。 同时也预处理了可能对答案做出贡献的值(一般是预处理根号内的素数)。 与这道题很相似: 洛谷P1835 素数密度_NOI导刊2011提高(04) #include<bits/stdc++.h> using namespace std; #define N 1000005 #define ll long long #define ri register int int cnt=0,ans=0,pri[N],su[N],fl[N]; ll l,r; void suu(int n) { for(ri i=2;i<=n;++i){ if(!pri[i]) su[++cnt]=i; for(ri j=1;j<=cnt&&su[j]*i<=n;++j){ pri[su[j]*i]=1; if(i%su[j]==0) break; } } } int main() { scanf("%lld%lld",&l,&r); suu(sqrt(r)); for(int i=1;i<=cnt;++i){ for(ll j=l/su[i]*su[i];j<=r;j+=su[i]){ if(j>=l && j!=su[i])

模意义下的除法变乘法

自作多情 提交于 2019-11-30 03:01:51
前言 大家都知道,四则运算中只有除法不支持模运算。 因此,如果在需要取模(特别是统计方案之类的题目),带除法的公式会十分难处理。 本文介绍一种在模意义将除法换成乘法的方法。 前置知识:欧拉定理 $a^{\varphi (b) } \equiv 1 (mod \space b)$ $\varphi$表示欧拉函数 欧拉函数以及证明请自行百度 使用方法 现假设你要计算$a \divide b \space(mod \space c)$ 可将其变形为$a *{1 \over b} \space(mod \space c) 因为$b^{\varphi (c) } \equiv 1 (mod \space c)$ 所以$b^{(\varphi (c)-1) } \equiv 1 \over b (mod \space c)$ 代回$a *{1 \over b} \space(mod \space c)$ 得$a*b^{(\varphi (c)-1) } (mod \space c)$ 解决! 关于欧拉函数的计算,如果c为素数,则原式直接等于$a*b^{(c-1) } (mod \space c)$ (欧拉函数的定义) 否则可以$(O(n))$求出 来源: https://www.cnblogs.com/linzhuohang/p/11548813.html

浅谈欧拉函数

自作多情 提交于 2019-11-29 16:02:00
介绍 欧拉函数是小于 \(x\) 的整数中与 \(x\) 互质的数的个数,一般用 \(\varphi(x)\) 表示。特殊的, \(\varphi(1)=1\) 。 内容 通式: \(\varphi(x)=x\prod_{i=1}^n{1-\frac{1}{p_i}}\) 其中, \(p_1,p_2...p_n\) 为 \(x\) 的所有质因数, \(x\in N^*\) 。 性质 对于质数 \(p\) , \(\varphi(p)=p-1\) 。 若 \(p\) 为质数, \(n=p^k\) ,则 \(\varphi(n)=p^k-p^{k-1}\) 。 欧拉函数是积性函数,但不是完全积性函数。若 \(m,n\) 互质,则 \(\varphi(m*n)=\varphi(m)*\varphi(n)\) 。特殊的,当 \(m=2,n\) 为奇数时, \(\varphi(2*n)=\varphi(n)\) 。 当 \(n>2\) 时, \(\varphi(n)\) 是偶数。 小于 \(n\) 的数中,与 \(n\) 互质的数的总和为 \(\varphi(n)*n/2 \ \ \ (n>1)\) 。 \(n=\sum_{d|n}\varphi(d)\) ,即 \(n\) 的因数(包括1和它本身)的欧拉函数之和为 \(n\) 。 容斥原理求欧拉函数 将 \(N\) 分解为不同素数的乘积,即

cf1208G Polygons 欧拉函数

浪子不回头ぞ 提交于 2019-11-28 21:50:24
链接 cf 给你两个正整数 \(n\) 和 \(k\) ,询问在一个圆上你最少需要几个点构才能造出 \(k\) 个边数小于等于 \(n\) 的正多边形 思路 深受迫害,所以写的详细一点,不会请留言。 性质1 考虑加进一个 \(x\) 边形。那么他的因子 \(d\) 一定在他之前加进来了. 因为 \(d\) 可以完全由 \(x\) 的点表现出来。 如果没加 \(d\) ,那么加 \(d\) 显然比加 \(x\) 优秀(显然)。 性质2 两个图形,让他们尽量多的重合些点是好的。 那两个图形能重合多少点呢?答案显然是固定的。 两个图形让他们一个点重合,即可得到最好的。 因为是正多边形,所以随便重合一个点,重合的情况都是一样的。 即最优的答案。 所以我们加入的 \(k\) 个正多边形都重合到一个点上,设这个点为 \(0\) 点。 联系起来 \(x\) 在圆上,假设他的点为 \(\frac{0}{x},\frac{1}{x}……\frac{x-1}{x}\) 由 \(part2\) 可以知道,0这个点上每个图形都会经过。 由 \(part1\) 可以知道 \(x\) 的点上,他的因子在之前就会加入,所以他的因子及其倍数都是原先就有的(被覆盖过)。 这个过程就是类似于暴力筛 \(phi\) 的过程,所以剩下的就是与他互质的数。 所以一个正 \(x\) 边形的贡献就是 \(phi(x)\) .

GuGuFishtion HDU - 6390 (欧拉函数,容斥)

六月ゝ 毕业季﹏ 提交于 2019-11-28 19:30:21
GuGuFishtion \[ Time Limit: 1500 ms\quad Memory Limit: 65536 kB \] 题意 给出定义 \(Gu(a, b) = \frac{\phi(ab)}{\phi(a)\phi(b)}\) 求出 \(\sum_{a=1}^{m}\sum_{b=1}^{n}Gu(a,b) (mod p)\) 思路 首先对于欧拉函数,我们知道欧拉函数的朴素式子为: \(\phi(n) = n*(1-\frac{1}{p1})*(1-\frac{1}{p2}) * ... * (1-\frac{1}{pn})\) , \(pi\) 为 \(n\) 的质因子。 对于任意两个数 \(a,b\) ,令 \(g = gcd(a, b)\) 若 \(g != 1\) ,令 \(pi\) 为 \(a\) 特有的质因子, \(qi\) 为 \(b\) 特有的质因子, \(ti\) 为 \(a,b\) 共有的质因子,那么将 \(Gu(a, b)\) 展开,就可以得到 \[ \begin{aligned} Gu(a, b) &= \frac{\phi(ab)}{\phi(a)\phi(b)}\\ &= \frac{ab \prod(1-\frac{1}{pi}) \prod(1-\frac{1}{ti}) \prod(1-\frac{1}{qi}) }{a \prod

基础回顾--素数筛,欧拉函数

谁说胖子不能爱 提交于 2019-11-28 13:41:38
欧拉筛法:   直接判断素数耗时,换个角度标记非素数,那么没有被标记的就是素数。   关键点: 除2之外的偶数必然不是素数,所以 只需要遍历奇数 寻找0-N范围中的素数时,遍历只需要从 2-->sqrt(N+0.5) ,因为sqrt(N+0.5)之后的数必然在第二层的循环中标记过。 二层循环的意思:一层循环找到了素数prime,则要 将prime的所有倍数都筛去 。注意从prime*prime开始筛,因<prime*prime的数必然能被之后找到的prime的倍数筛去。 const int maxn = 10004; bool vis[maxn]; int prime[maxn], cnt; void sort_prime() { prime[cnt++] = 2; int m = (int) sqrt(maxn + 0.5); for(int i=3; i<m; i+=2) { if(!vis[i]) { prime[cnt++] = i; for(int j=i*i; j<maxn; j+=i) { vis[j] = true; } } } return; } 欧拉函数:    求解所有<=n且与n互素的数的总数 ,特别的 phi(1) = 1。 (phi其实是数学符号的谐音~)   根据性质 phi(n) = n*(1-1/p1)*(1-1p2)...*(1-1/pk)

欧拉函数|降幂

不羁岁月 提交于 2019-11-28 05:54:00
定义 对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。例如φ(8)=4,因为1,3,5,7均和8互质。 内容 通式: 其中p1, p2……pn为x的所有质因数,x是不为0的整数。 性质 ① n 的所有质因子之和是φ(n)*n/2。 ② 若m,n互质,φ(m*n)=φ(m)*φ(n)。(欧拉函数是积性函数) ③ 若n为奇数,φ(2n)=φ(n) ④ 若n为质数,则φ(n)=n-1 ⑤ 若n>2,则φ(n)是偶数。 ⑥ 若p为质数, ⑦ 令a为N的质因子,则 若(N%a==0&&(N/a)%a==0) 则有: φ(N)=φ(N/a)*a 若(N%a==0&&(N/a)%a!=0) 则有: φ(N)=φ(N/a)*(a-1) 实现 根据公式 int Euler(int n) { int res=n; for(int i=2;i*i<=n;i++) { if(n%i==0) { res=res/i*(i-1); while(n%i==0) n/=i; } } if(n>1) res=res/n*(n-1); return res; } 埃拉托斯特尼筛求欧拉函数 int phi[maxn]; void euler() { for(int i=2;i<maxn;i++)

LightOJ-1370(欧拉函数)

前提是你 提交于 2019-11-27 16:19:55
Bi-shoes and Phi-shoe LightOJ-1370 题目的含义含简单,就是先筛欧拉函数,打表,最后遍历就行了。 本题根据欧拉函数的特质还有一个不需要使用欧拉函数的方法,直接筛素数就行了。 另一种方法 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; const int maxn=1e6+6; int a[10004]; int n; //欧拉函数表 int phi[maxn]; 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[i]){ for(int j=i;j<=n;j+=i){ if(!phi[j]) phi[j]=j; phi[j]=phi[j]/i*(i-1); } } } } int main(){ phi_table(maxn); int t; cin>>t; int k=0; while(t--){ cin>>n; int x; long long ans=0; for(int i=0;i<n;i++){ cin>>x; for(int i=x+1;;i++){ if

[欧拉函数]BZOJ 2226 LCMsum

拟墨画扇 提交于 2019-11-27 14:47:07
Description Given n, calculate the sum LCM(1,n) + LCM(2,n) + .. + LCM(n,n), where LCM(i,n) denotes the Least Common Multiple of the integers i and n. Input The first line contains T the number of test cases. Each of the next T lines contain an integer n. Output Output T lines, one for each test case, containing the required sum. Sample Input 3 1 2 5 Sample Output 1 4 55 HINT Constraints 1 <= T <= 300000 1 <= n <= 1000000 分析 原式:$\sum _{i=1}^n lcm(i,n)$ $n\sum _{i=1}^n \frac{i}{gcd(i,n)}$ 考虑直接枚举因子: $n\sum _{d|n} \sum _{i=1}^{\frac{n}{d}} [gcd(\frac{n}{d},i)=1]i$ $n\sum _{d|n} \frac{d\varphi (d)}