1. 程式人生 > >數論一點點總結

數論一點點總結

turn 素數 uic quick 情況下 點擊 quic mod air

數論基礎

最大公約數Gcd

int gcd(int a, int b) //a大於b
{
    return a % b == 0 ? b : gcd(b, a % b);
}

最小公倍數Lcm

int Lcm(int a,int b)
{
return a/gcd(a,b)*b;
}

費馬小定理

費馬小定理(Fermat Theory)是數論中的一個重要定理,其內容為:假設p是質數(素數),且
Gcd(a,p)=1,那麽a^(p-1) ≡1(mod p)。即:假如a是整數,p是質數,且a,p互質(即兩者只有一個公約數1),那麽a的(p-1)次方除以p的余數恒等於1。該定理是1636年皮埃爾·德·費馬發現的。

唯一分解定理

算術基本定理,又稱為正整數的唯一分解定理,即:每個大於1的自然數均可寫為質數的積,而且這些素因子按大小排列之後,寫法僅有一種方式。(素數的分解方法唯一)
G - Pairs Forming LCM(例題)

拓展的歐幾裏得算法

素數定理

Eratosthenes篩法

逆元(inv)

1.什麽是逆元

當求解公式:(a/b)%m 時,因b可能會過大,會出現爆精度的情況,所以需變除法為乘法:
設c是b的逆元,則有bc≡1(mod m);
則(a/b)%m = (a/b)
1%m = (a/b)bc%m = ac(mod m);
即a/b的模等於a
b的逆元的模;
逆元就是這樣應用的

2.求逆元的方法

(1).費馬小定理

在是素數的情況下,對任意整數都有。 如果無法被整除,則有。 可以在為素數的情況下求出一個數的逆元,,即為逆元。
題目中的數據範圍1<=x<=10^9,p=1000000007,p是素數;
所以x肯定就無法被p整除啊,所以最後就得出x^(p-2)為x的逆元啦。
復雜度O(logn)

const int mod = 1000000009;
long long quickpow(long long a, long long b) {

    if (b < 0) return 0;

    long long ret = 1;

    a %= mod;

    while(b) {

        if (b & 1) ret = (ret * a) % mod;

        b >>= 1;

        a = (a * a) % mod;

    }

    return ret;
}
long long inv(long long a) {

    return quickpow(a, mod - 2);

}

本文來自 Here_jiaxinwei 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/baidu_35643793/article/details/75268911?utm_source=copy

數論一點點總結