1. 程式人生 > >數學小知識(長期更新)

數學小知識(長期更新)

如果有任何地方寫錯了,歡迎在評論裡指出

前言

今天開始學習數論,大概就是學一些自己以前不會或者說搞得不是特別懂的東西。
原因
1.感覺以前學數論都是背了結論就跑,一直沒有理解,感覺不僅容易忘,想起來還漏洞百出,特地來填一下坑。
2.感覺自己的數論太弱了,之前出了一個擴充套件尤拉定理都不會了QAQ
其實我就沒會過
不管有用的沒用的都學了一下,留個印象吧,至少可以裝逼。
學習順序大致是前面是後面的基礎

10.22下午

整除的定義:

如果n/m是一個整數,且m>0,那麼就是整除,注意要m>0

歐幾里得演算法:

gcd(0,n)=n
gcd(m,n)=gcd(

n%m,m)

擴充套件歐幾里得演算法:

mm+nn=gcd(n,m)
求可行的mn
m=0時,使得m=0,n=1
反之另r=n%m
並用r,m遞迴操作
由於r=nn/mm,(前面的是下取整)且rr+mm=gcd(m,n)
然後把r代過去就可以了

算術基本定理

我才不會告訴你我沒有認真看證明呢

一些看似沒什麼用的定義:

歐幾里得數和麥森數,麥森數質數

階乘的增長速度

nn/2<=n!<=(n+1)n2n
證明挺簡單的,不寫了

斯特林公式

誤差大概是1/(12n),感覺沒什麼用。。

求出n!含有多少個2,(不是2的類推):

樸素演算法大家都會,就是

i=1n/i
然後log次久之後就都是0了
然後還有另外一種演算法,定義v(n)為n的二進位制中1的個數
然後答案就是nv(n)
這個大家可以化成二進位制,然後考慮每一位對答案的貢獻,就可以得出那個式子了

當然還有上面那個問題答案的上界

ans<np+np2+np3+np4+npk
k趨向與
用等比數列可以將該式子化成ans<np1
這個似乎也沒什麼用,但是我學了一下無窮幾何級數求和

10.22晚

(因為很困,所以效率極低)

逆元

對於正整數ax1(modp)
具體有什麼用?當要對模數進行除法的時候可以改為乘他的逆元

原因(d為被除數):
da(modp)=daax(modp)=dx(modp)

怎麼求呢?
解不定方程(用歐幾里得即可):ax+bp=1
正確性顯然

快速冪:a(p2)次方即為他的逆元
根據費馬小定理:
a(p1)1(modp)
aa(p2)1(modp)
要值得除以的是,這個這個定理是當p為質數且a,p互質的時候成立的,所以實用性沒那麼廣

存在條件:a與p互質
因為當且僅當a和q互質的時候,不定方程有解(原因看下一個)
費馬小定理成立,且費馬小定理還必須當p時質數

裴蜀定理

內容:ax+by=d有解的條件為d是gcd(x,y)的倍數
設g=gcd(x,y)
ax+by=g的情況一定有解,我有一個不靠譜的想法:既然構造方式都有了,又怎麼會無解呢?
又因為x是g的倍數,y是g的倍數,所以ax+by當然也是g的倍數啦
所以當g不為1的時候,ax+by=1是無解的,所以逆元要求a和q互質

法裡級數

定義:階為N的法裡級數,是介於0到1之間分母不超過N的所有最簡分陣列成的數的集合,且按照遞增的次序排列
構造方法:我們可以用插入法,來獲得。。不是很想打太多字了。方法叫做Stern-Brocot樹。如果N無限大,那麼這棵樹就無限深。你可以用這個“二分”出一個無理數兩端無限接近的分數
做題用處:不怎麼知道

同餘的知識

這個爛大街了。。就是炒了一下冷飯
還有就是akbk(modpk)
可以得出ab(modp)

中國剩餘定理與擴充套件中國剩餘定理

用處:解同餘方程
這個東西我以前沒學過,今晚剛剛學的
放一下學習資料吧
中國剩餘定理
擴充套件中國剩餘定理
擴充套件中國剩餘定理的板子:

#include<cstdio>
#include<cstring>
typedef long long LL;
LL exgcd (LL a,LL b,LL &x,LL &y)
{
    if (a==0)
    {
        x=0;y=1;
        return b;
    }
    LL tx,ty;
    LL d=exgcd(b%a,a,tx,ty);
    x=ty-(b/a)*tx;
    y=tx;
    return d;
}
int main()
{
    LL n;
    LL b1,m1;//第一個方程的餘數和除數
    bool tf=true;
    scanf("%lld",&n);
    scanf("%lld%lld",&b1,&m1);
    for (LL u=2;u<=n;u++)
    {
        LL b2,m2;
        scanf("%lld%lld",&b2,&m2);
        LL A=m1,B=m2,C=b2-b1;
        LL X,Y;
        LL d=exgcd(A,B,X,Y);
        if (C%d!=0) {tf=false;break;}
        X=(X*(C/d)%(B/d)+(B/d))%(B/d);
        b1=m1*X+b1;
        m1=m1/d*m2;
    }
    if (!tf) printf("no solution!\n");
    else printf("%lld\n",b1);
    return 0;
}

10.23晚

(今晚也沒弄什麼偉大的東西)

一個不知道叫什麼的定理

0(modm),n(modm),2n(modm),3n(modm)......(m1)n(modm),
d=gcd(n,m)
這m個數將會按照某種次序恰好組成m/d個數的d個複製
我們可以得到
jn