欧拉定理

费马小定理&欧拉定理

允我心安 提交于 2020-02-28 11:49:06
在 p 是素数的情况下,对任意整数 x 都有 x p ≡ x(mod p) 。这个定理被称作费马小定理 其中如果 x 无法被 p 整除,我们有 x p-1 ≡ 1(mod p) 。利用这条性质,在 p 是素数的情况下,就很容易求出一个数的逆元。那上面的式子变形之后得到 a -1 ≡ a p-2 (mod p) ,因此可以通过快速幂求出 逆元 。 我们先来证明一下费马小定理: 费马小定理证明: 一、 准备知识 引理 1 :剩余系定理 2 若 a,b,c 为任意 3 个整数 ,m 为正整数 , 且 (m,c)=1, 则当 ac≡bc(mod m) 时 , 有 a≡b(mod m) 证明: ac≡bc(mod m) 可得 ac–bc≡0(mod m) 可得 (a-b)c≡0(mod m) 因为 (m,c)=1 即 m,c 互质 ,c 可以约去 ,a–b≡0(mod m) 可得 a≡b(mod m) 引理 2 :剩余系定理 5 若 m 为整数且 m>1,a[1],a[2],a[3],a[4],…a[m] 为 m 个整数 , 若在这 m 个数中任取 2 个整数对 m 不同余 , 则这 m 个整数对 m 构成完全剩余系 . 证明:构造 m 的完全剩余系( 0,1,2,…m-1 ) , 所有的整数必然这些整数中的 1 个对模 m 同余 . 取 r[1]=0,r[2]=1,r[3]=2,r[4]

欧拉函数、欧拉定理和费马小定理

断了今生、忘了曾经 提交于 2020-02-28 11:47:37
对于正整数n,欧拉函数是小于等于n的正整数中与n互质的数的数目,表示为φ(n)。 性质1:对于素数p,φ(p)=p-1。 性质2:对于两个互质数p,q,φ(pq)=φ(p)*φ(q)=(p-1)(q-1)。(积性函数)(易证) 性质3:若n是质数p的k次幂,φ(n)=p k -p k-1 =(p-1)p k-1 ,因为除了p的倍数外,其他数都跟n互质。 性质4: 因为:x可以分解成p1 q1 ×p2 q2 ×p3 q3 ……×pn qn (pi为x的质因数) 因为pi qi 两两互质,所以:φ(x)=φ(p1 q1 )×φ(p2 q2 )×φ(p3 q3 )……×φ(pn qn ) (性质2) 所以:φ(x)=(p1 q1 -p1 q1-1 )×(p2 q2 -p2 q2-1 )×(p3 q3 -p3 q3-1 )……×(pn qn -pn qn-1 ) (性质3) 提取x即得到公式。 性质5:n=Σφ(d|n) yu大有个牛逼的证法,把1到n的所有数除以n,变成n个既约分数,分母d只可能是n的约数。并且,以d为分母的分数个数正好是φ(d)。因此,分数总数n=Σφ(d|n)。 欧拉定理: 对于互质的正整数a和n,有 证明: ( 1 ) 令 Zn = {x1, x2, …, xφ(n)} (mod n), S = {a * x1, a * x2, … , a * xφ(n)}

欧拉定理和费马小定理的证明

断了今生、忘了曾经 提交于 2020-02-28 11:47:21
转自博主 https://blog.csdn.net/qq_24451605/article/details/47045279 在看这篇博客之前推荐看一看我对于欧拉函数的递推公式的证明,方便理解。 点击打开链接 ————————————-欧拉定理的内容————————————————————————– a和n互质,那么a^phi(n) == 1 ( mod n ) ————————————欧拉定理的证明————————————————————————— 设xi为n当中与n互质的数,一共有phi(n)个: 1)设mi = a * xi , 则mi与n互质 因为a与n互质,mi也与n互质,所以说这个两个因数当中都没有与n相同的质因子,所以mi也不可能有,所以mi与n必然互质 2)因为mi与n互质,故mi不能被n整除 mi = p*n+q*r 若余数r与n不互质,那么d = gcd ( r , n )!=1 , mi = d*c(c代表一个正整数),那么gcd ( mi , n ) != 1 , 与mi和n互质矛盾! 故mi%n == ri, ri 均与n互质 3)若mi == mj ( mod n ) (i!=j) mi-mj==a*(xi-xj)(mod n ) == 0 ( mod n ) xi和xj均是小于n的正整数,故xi==xj时才能成立,则与i!=j矛盾 故mi

欧拉函数和欧拉定理

好久不见. 提交于 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\)

C - GCD【化简+欧拉定理】

被刻印的时光 ゝ 提交于 2020-01-26 14:41:02
Discription The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b),is the largest divisor common to a and b,For example,(1,2)=1,(12,18)=6. (a,b) can be easily found by the Euclidean algorithm. Now Carp is considering a little more difficult problem: Given integers N and M, how many integer X satisfies 1<=X<=N and (X,N)>=M. Input The first line of input is an integer T(T<=100) representing the number of test cases. The following T lines each contains two numbers N and M (2<=N<=1000000000, 1<=M<=N), representing a test case. Output For each test case,output

扩展欧拉定理

自作多情 提交于 2020-01-22 21:18:03
欧拉定理 若 \(gcd(a,m)=1\) ,则 \(a^{φ(m)}≡1\ (mod\ m)\) 扩展欧拉定理 若 \(b\geqslant φ(m)\) ,则 \(a^b≡a^{b\ mod\ φ(m)+φ(m)}\ (mod\ m)\) 利用扩展欧拉定理,可以处理快速幂取模,例如 【模板】欧拉定理 和 上帝与集合的正确用法 \(a^b \bmod m\) \(code:\) ll qp(ll x,ll y) { ll ans=1; while(y) { if(y&1) ans=(ans*x)%m; x=(x*x)%m; y>>=1; } return ans%m; } ll get_phi(ll x) { ll ans=x; for(int i=2;i<=sqrt(x);++i) { if(x%i) continue; ans=ans*(i-1)/i; while(x%i==0) x/=i; } if(x>1) ans=ans*(x-1)/x; return ans; } ...... for(int i=1;i<=len;++i) { b=((b<<1)+(b<<3)+(str[i]^48)); if(b>=phi) b%=phi,flag=true; } if(flag) b+=phi; printf("%lld",qp(a,b)); 来源: https://www

HDU 2837 Calculation(欧拉定理+递归)

雨燕双飞 提交于 2020-01-15 01:29:26
Description: Assume that f ( 0 ) = 1 f(0) = 1 f ( 0 ) = 1 and 0 0 = 1 0^0=1 0 0 = 1 . f ( n ) = ( n % 10 ) f ( n / 10 ) f(n) = (n\%10)^{f(n/10)} f ( n ) = ( n % 1 0 ) f ( n / 1 0 ) for all n bigger than zero. Please calculate f ( n ) % m . ( 2 ≤ n , m ≤ 1 0 9 , x y f(n)\%m. (2 ≤ n , m ≤ 10^9, x^y f ( n ) % m . ( 2 ≤ n , m ≤ 1 0 9 , x y means the y y y th power of x x x ). Input The first line contains a single positive integer T T T . which is the number of test cases. T lines follows.Each case consists of one line containing two positive integers n n n and m m m . Output One integer

欧拉函数与欧拉定理

跟風遠走 提交于 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-09 20:40:10
浅谈欧拉定理及乘法逆元 本篇随笔简单讲解一下信息学奥林匹克竞赛数论部分 欧拉定理及乘法逆元 这一知识点。介绍的内容大致分为这么几个部分: “同余的基本概念、费马小定理、欧拉定理及其推论、乘法逆元” 。 同余的基本概念 同余的概念啊非常简单啦:如果两个整数 \(a,b\) 除以一个数 \(m\) 的余数相等的话,那么就叫做 \(a,b\) 在模 \(m\) 的意义上同余。 记作: \[ a\equiv b\,\,\,(mod\,\,m) \] 那么根据同余的这个定义,我们很容易能推导出一个性质:如果两个数 \(a,b\) 在模 \(m\) 的意义下同余,那么 \(a-b\) 就是 \(m\) 的倍数,这是显然的。 以及,如果 \(a\%m=1\) ,那么就可以被改写成这样的式子: \[ a\equiv 1\,\,\,(mod\,\,m) \] 这个转化的正确性也是显然的。 费马小定理 费马小定理也非常简单啦!用语言描述就是,如果一个数 \(p\) 是质数,那么对于一个不为 \(p\) 的倍数的整数 \(a\) ,有 \(a^{p-1}\equiv 1\,\,\,(mod\,\,p)\) 。那么把这个结论两边同时乘上一个 \(a\) ,即可得出:对于任意的整数 \(a\) , \(a\) 的 \(p\) 次幂与 \(a\) 在模 \(p\) 的意义上同余。 即: \[ a^p

习题:Power Tower(欧拉定理)

时间秒杀一切 提交于 2019-12-05 11:29:49
题目 传送门 思路 首先我们考虑暴力的做法 也就是说我们直接用欧拉定理直接暴力做 时间复杂度为 \(O(n*m)\) 这个时间复杂度明显是原地爆炸的 但是我们考虑在用欧拉函数的过程中 每一层都会使用到上一层的 \(\varphi\) 单独考虑 \(\varphi\) 的变化过程,很容易发现 \(\varphi(\varphi(m))\le \frac{\varphi(m)}{2}\) 而且 \(\varphi(1)=1\) 我们考虑1个数与取模1再加1, 这不还是1么 所以这样下来总的时间复杂度可以降到 \(O(m*log_n)\) 代码 #include<iostream> using namespace std; long long n,mod; long long m; long long l,r; long long a[500005]; long long phi[500005]; long long varphi(long long n) { long long ans=n; for(int i=2;1ll*i*i<=n;i++) { if(n%i==0) { ans=ans/i*(i-1); while(!(n%i)) { n/=i; } } } if(n>1) ans=ans/n*(n-1); return ans; } long long ex_oular