數學小知識(長期更新)
如果有任何地方寫錯了,歡迎在評論裡指出
前言
今天開始學習數論,大概就是學一些自己以前不會或者說搞得不是特別懂的東西。
原因
1.感覺以前學數論都是背了結論就跑,一直沒有理解,感覺不僅容易忘,想起來還漏洞百出,特地來填一下坑。
2.感覺自己的數論太弱了,之前出了一個擴充套件尤拉定理都不會了QAQ
其實我就沒會過
不管有用的沒用的都學了一下,留個印象吧,至少可以裝逼。
學習順序大致是前面是後面的基礎
10.22下午
整除的定義:
如果
歐幾里得演算法:
擴充套件歐幾里得演算法:
求可行的
當
反之另
並用
由於
然後把
算術基本定理
我才不會告訴你我沒有認真看證明呢
一些看似沒什麼用的定義:
歐幾里得數和麥森數,麥森數質數
階乘的增長速度
證明挺簡單的,不寫了
斯特林公式
誤差大概是1/(12n),感覺沒什麼用。。
求出n!含有多少個2,(不是2的類推):
樸素演算法大家都會,就是
然後log次久之後就都是0了
然後還有另外一種演算法,定義
然後答案就是
這個大家可以化成二進位制,然後考慮每一位對答案的貢獻,就可以得出那個式子了
當然還有上面那個問題答案的上界
k趨向與
用等比數列可以將該式子化成
這個似乎也沒什麼用,但是我學了一下無窮幾何級數求和
10.22晚
(因為很困,所以效率極低)
逆元
對於正整數
具體有什麼用?當要對模數進行除法的時候可以改為乘他的逆元
原因(d為被除數):
怎麼求呢?
解不定方程(用歐幾里得即可):ax+bp=1
正確性顯然
快速冪:
根據費馬小定理:
要值得除以的是,這個這個定理是當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無限大,那麼這棵樹就無限深。你可以用這個“二分”出一個無理數兩端無限接近的分數
做題用處:不怎麼知道
同餘的知識
這個爛大街了。。就是炒了一下冷飯
還有就是
可以得出
中國剩餘定理與擴充套件中國剩餘定理
用處:解同餘方程
這個東西我以前沒學過,今晚剛剛學的
放一下學習資料吧
中國剩餘定理
擴充套件中國剩餘定理
擴充套件中國剩餘定理的板子:
#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晚
(今晚也沒弄什麼偉大的東西)
一個不知道叫什麼的定理
設
這m個數將會按照某種次序恰好組成
我們可以得到