日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数论杂谈(欧拉定理与费马小定理结论与应用)

發(fā)布時(shí)間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数论杂谈(欧拉定理与费马小定理结论与应用) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 歐拉定理:
    • 歐拉定理性質(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ù)模板

// 直接求 long long Euler( long long n ){long long res = n;for( long long i =2 ;i*i<=n;i++){if( n %i == 0 ){n/=i;res = res - res/i;}while( n % i==0)n/=i;}if( n > 1 )res = res - res/n;return res; }

歐拉定理性質(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ù)

    long long f(long a,long b,long n) //定義函數(shù),求a的b次方對(duì)n取模 {int t,y;t=1;y=a;while(b!=0){if((b&1)==1)t=t*y%n;y=y*y%n;b=b>>1;}return t; }

    相關(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。