學習總結(數論)

2021-10-05 23:06:27 字數 2119 閱讀 9135

【研究內容】

數論,是專門研究整數的純數學的分支,而整數的基本元素是素數(也稱素數),所以數論的本質是對素數性質的研究。

acm中的數論主要涉及素數、約數、同餘和數論函式等相關知識。

【基本概念】

整數集合:?=

自然數集合:?=

整除:若 ?=??,其中 ?,?,? 都是整數,則 ? 整除 ?,記做 ?|?,否則記做 ?∤? 。

約數:如 ?|? 且 ?≥0,則稱 ? 是 ? 的約數(因數),? 是 ? 的倍數。

1 整除任何數,任何數都整除 0 。

若 ?|?,?|?,則 ?|(?+?), ?|(?−?) 。

若 ?|?,則對任意整數 ?,?|(??) 。

傳遞性:若 ?|?,?|?,則 ?|? 。

因子:正整數 ? 的平凡約數為 1 和 ? 本身,? 的非平凡約數稱為 ? 的因子。如 20 的因子有 2、4、5、10 。

一、整除性

若a和b都為整數,a整除b是指b是a的倍數,a是b的約數(因數、因子),記為a|b。

二、素數

【素數判定方法】

1、暴力

直接遍歷2~n

\sqrt

n​看有沒有數能被n整除。

bool

isprime

(int n)

}

2、篩法

這裡就是新的方法了。

首先,我們篩掉2的倍數,然後篩掉3的倍數,然後篩掉5的倍數……

剩下來的數就是素數。

這裡用到陣列來標記,如果是其倍數的話直接標記false,剩下的就是素數了。

bool isprime[

1000010];

void

eratos

(int n)

}

三、因數分解

算術基本定理:對於每個整數n,都可以唯一分解成素數的乘積,如圖所示:

然後可以化成這種形式:

}【優化】

利用埃氏篩法可以快速實現素因數分解,只要在判定質數時記錄下每個數值的最小素因數即可。

演算法實現如下:

#define maxn 1000000

bool isprime[maxn+1]

;int minfactor[maxn+1]

;//記錄每個數的最小素因數的陣列

void

eratos

(int n)

for(i =

2;i * i <= n;

++i)}}

}vector<

int>

factor

(int x)

return ret;

}

近期總結

近期做的題基本都是打codeforces做的題,打了三場。

怎麼說呢,總感覺做題時候思維跟不上,單純的用數學邏輯來思考題目,就像是第二場testing round #16的c題,用map來做很簡單就可以ac,但我用陣列一直超時,做了大半個小時也一直卡在第二個測試資料,然後超時。這是思維的侷限,現在也不知道用什麼方法來突破這種侷限,只希望能夠做題做多了熟悉做題的方法了來解決這個問題。

還發現自己的乙個問題,就是在做最近的這場div4的比賽的時候(不得不說div4並不比div3簡單),在做b題的時候,總是不敢去深想,怕深想浪費時間,直接去做的c題,心理有個怕麻煩,怕浪費時間的心理,稍微有點焦慮的感覺,這是應該克服的,比賽加不加分並不重要,關鍵在於能不能把題目解決,做題本來就是乙個鍛鍊思維的過程,然而我卻過分在意分數了。這點需要改。

還有部分題目沒有補完,抓緊時間盡快吧。

最後,繼續堅持,加油!

ACM數論總結

斷斷續續的學習數論已經有一段時間了,學得也很雜,現在進行一些簡單的回顧和總結。學過的東西不能忘啊。1 本原勾股數 概念 乙個三元組 a,b,c 其中a,b,c沒有公因數而且滿足 a 2 b 2 c 2 首先,這種本原勾股數的個數是無限的,而且構造的條件滿足 a s t,b s 2 t 2 2,c s...

數論模板總結

尤拉函式 函式的值 通式 x x 1 1 p1 1 1 p2 1 1 p3 1 1 p4 1 1 pn 其中p1,p2 pn為x的所有質因數,x是不為0的整數。1 1 唯一和1 互質的數就是1本身 注意 每種質因數只乙個。比如12 2 2 3 尤拉公式 那麼 12 12 1 1 2 1 1 3 4 ...

數論知識總結

錯排公式 lucas定理 組合數取模 素數求解 尤拉函式 大數相乘 反素數兩直線是否相交 點到直線的最短距離 三分1三分2 第一類stirling數和第二類stirling數 卡特蘭數 判斷乙個點是否在多邊形內部 博弈之 nim 遊戲和 sg 函式 nim博弈變形 anti nim 博弈論重要演算法...