同餘取模。。

同模取餘

基本性質

ab(modn);
a+kb=n;
n|ab;

ab(modn);d|n;
ab(modd);

ab(modn);d|(a,b,n)
adbd(modnd);

ab(modn);
(c,n)=1;
acbc(modn);

a1b1(modn);a2b2(modn);
a1+a2b1+b2(modn);
a1a2b1b2(modn);

ab(modp); ab(modq);(p,q)
ab(modpq);

費馬小定理

ap11(modp);(p,(a,p)=1);

證明

P={1,2,3,,p1};
(a,p)=1;
A={a,2a,3a,,(p1)a};
(p1)a2a3a(p1)a(modp);
(p1)ap1(p1)(modp);
((p1),p)=1;
ap11(modp);

除法逆元

ababp2(modp);(p,(b,p)=1);
Bb1(modp);
ap11(modp),(p,(a,p)=1);
B=bp2;

威爾遜定理

(p1)1(modp),(p);

證明

p=2;  顯然成立;

p>2;
對於所有的整數1a(p1), 存在1a1(p1), 使
得:
aa11(modp);
a=a1;
a21(modp);
a=1a=p1;
即:

12(p2)(p1)1(p1)aaa11(p1)1(modp);

歐拉函數

m 是一個正整數,1,2,m1,m 中與m 互素的個數,記做φ(m);  1 與任何數互素;

φ(p)=p1;(p);
m=pα,φ(m)=pαpα1;
φ(m)=mp|m(11p);

性質

φ(pq)=φ(p)φ(q);((p,q)=1)
φ(2q)=φ(q);(q);
小於n與n互素的正整數的和:  
sum=nφ(n)2;

直接求歐拉值\打標
int get_Euler(int n)   //直接求值 euler(n) = n * (1 - 1/p1) * (1 - 1/p2)*...*;
{
    int tmp = n, ans = n;

    for (int i = 2; i * i <= tmp; i++)
    {
        if (tmp % i == 0)
        {
            ans = ans / i * (i - 1);

            while (tmp % i == 0)
            {
                tmp /= i;
            }
        }
    }

    if (tmp > 1)
    {
        ans = ans / tmp * (tmp - 1);
    }

    return ans;
}

int euler[N];

void init_Euler()    //打表
{
    euler[1] = 1;

    for (int i = 2; i < N; i++)
    {
        euler[i] = i;
    }

    for (int i = 2; i < N; i++)
    {
        if (euler[i] == i)
        {
            for (int j = i; j < N; j += i)
            {
                euler[j] = euler[j] / i * (i - 1);
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章