数论杂谈(欧拉定理与费马小定理结论与应用)
文章目錄
- 歐拉定理:
- 歐拉定理性質(zhì):
- 擴(kuò)展歐拉定理:
- 費(fèi)馬小定理:
- 指數(shù)循環(huán)節(jié)
- 費(fèi)馬大定理
- 逆元:
- 例題
- 原根
- 定義:
- 原根存在條件
- 例題
- 快速冪
- 代碼
- 矩陣快速冪
- 原理:
- 代碼:
歐拉定理:
aφ(n)≡1 (mod n) ,其中 gcd(a,n)=1
歐拉函數(shù)是小于x的整數(shù)中與x互質(zhì)的數(shù)的個(gè)數(shù),一般用φ(x)表示。特殊的,φ(1)=1。
歐拉函數(shù)模板
歐拉定理性質(zhì):
假設(shè) p, q是兩個(gè)互質(zhì)的正整數(shù),則 p * q 的歐拉函數(shù)為 φ(p * q) = φ§ * φ(q) , gcd(p, q) = 1 。
任意一個(gè)整數(shù) n 都可以表示為其素因子的乘積, 那么?(n) = n( 1?1/p1 )( 1?1/p2 )…( 1?1/pk ) ,
對(duì)于給定的一個(gè)素?cái)?shù) p , φ( p ) = p -1。則對(duì)于正整數(shù) n = pk ,φ(n) = pk - pk-1
擴(kuò)展歐拉定理:
當(dāng)(a,m)=1時(shí),ac≡ac mod φ(m) (mod m)
可以直接指數(shù)取模,防止指數(shù)爆炸
推廣到一般情況:ab≡ab mod φ(n)+φ(n)(mod n)
費(fèi)馬小定理:
ap?1≡1 (mod p) ,其中 gcd(a,p)=1 ,p為質(zhì)數(shù)
費(fèi)馬小定理是歐拉定理的一種特殊情況。
例題:
計(jì)算2^100除以13的余數(shù)
相關(guān):
指數(shù)循環(huán)節(jié)
求證ab (%m)≡ab%φ(m)+φ(m)(%m),其中b≥φ(m)
費(fèi)馬大定理
xn + yn = zn(n >2時(shí),沒有正整數(shù)解)
逆元:
對(duì)于a和p,若 a * inv(a) % p ≡ 1,則稱inv(a)為a%p的逆元。p為質(zhì)數(shù)
例題
逆元與費(fèi)馬小定理:hdu 1576
原根
定義:
設(shè)m是正整數(shù),a是整數(shù),若a模m的階等于φ(m),則稱a為模m的一個(gè)原根。(φ(m)表示m的歐拉函數(shù))
如果g是P的原根,那么gi mod P的結(jié)果兩兩不同,有g(shù)p-1 =1 (mod P) ,P是素?cái)?shù)
原根存在條件
原根存在的條件有以下幾個(gè):
定理一:設(shè)p是奇素?cái)?shù),則模p的原根存在; [3]
定理二:設(shè)g是模p的原根,則g或者g+p是模p2的原根;
定理三:設(shè)p是奇素?cái)?shù),則對(duì)任意α,模pα的原根存在;
定理四:設(shè)α>=1,若g是模pα的一個(gè)原根,則g與g+pα中的奇數(shù)是模2pα的一個(gè)原根。
例題
Poj 1284 Primitive Roots
快速冪
這個(gè)就不介紹了。。。老熟人
代碼
ll poww(ll a,ll b) {int ans=1;int base=a;while(b){if(b&1)ans=ans*base%mod;base=base*base%mod;b>>=1;}return ans%mod; }矩陣快速冪
由快速冪延伸而來,將數(shù)延伸為矩陣,原理類似
原理:
快速冪+矩陣
矩陣乘法:左矩陣的第一行乘以右矩陣的第一列(分別相乘),乘完后相加
單位矩陣: nn的矩陣 mat ( i , i )=1; 任何一個(gè)矩陣乘以單位矩陣就是它本身 n單位矩陣=n, 可以把單位矩陣等價(jià)為整數(shù)1。(單位矩陣用在矩陣快速冪中)
代碼:
typedef long long ll; const int mod = 1e9 + 7; const int MAXN = 10005;//矩陣的大小 struct Mat {ll m[MAXN][MAXN]; }ans, a;//ans為結(jié)果矩陣,a為輸入矩陣 Mat Mul(Mat a, Mat b, int n) {//計(jì)算矩陣a乘矩陣b,n為矩陣的大小Mat c;//臨時(shí)矩陣cmemset(c.m, 0, sizeof(c.m));for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)for (int k = 1; k <= n; k++)c.m[i][j] = (c.m[i][j] + (a.m[i][k] * b.m[k][j]) % mod) % mod;return c; } Mat _power(Mat a, int b, int n) {//計(jì)算a^b,n為矩陣的大小for (int i = 1; i <= n; i++)//構(gòu)造單位矩陣ans[i][i] = 1;while (b) {if (b & 1)ans = Mul(ans, a, n);a = Mul(a, a, n);b >>= 1;}return ans; }總結(jié)
以上是生活随笔為你收集整理的数论杂谈(欧拉定理与费马小定理结论与应用)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 年画的四大产区是哪儿
- 下一篇: 《因果科学周刊》第2期:如何解决混淆偏差