数论---欧拉定理,快速幂求逆元

欧拉定理

内容:如果存在任意两个正整数a,n,满足a与n互质,那么

a^{f(n)}=1(mod n),f(n)表示的是欧拉函数:1~n中与n互质的数个数

证明

数论---欧拉定理,快速幂求逆元_第1张图片

证明结束

快速幂求逆元

同余:给定一个正整数m,如果两个整数a,b满足(a-b)能够被m整除,那么可以认为a与b对模m同余,记为a 同余 b

逆元:就是一个数的倒数,a/b (mod n) == a*c (mod n),c就是b的逆元

c可以看为b的倒数,如果b特别大,就要把b-1 换为 c

欧拉定理a^{f(n)}=1(mod n)

费马小引理

内容:存在质数p,a与p互质 a^{f(p)}=1(mod p) == a^{p-1} =1 (mod p)

推导a^{p-1}=1   ==   a*a^{p-2}=1   ,a 的逆元是 a^{p-2}

ac代码

#include 
#include 
using namespace std;
typedef long long ll;

int qmi(int a,int b,int p)
{//相当于求a^p-2 直接套用快速幂
    ll res=1;
    while(b)
    {
        if(b&1)
            res=1ll*res*a%p;
        b>>=1;
        a=1ll*a*a%p;
    }
    return res;
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {//求a的逆元
        int a,p;
        cin>>a>>p;
        if(a%p==0) cout<<"impossible"<

你可能感兴趣的:(快速幂,数论,线性代数,算法,动态规划)