真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

數(shù)論入門、歐幾里得及其擴展

? use C++11
? tip: 函數(shù)內(nèi)必須是用變量來傳輸引用形參

創(chuàng)新互聯(lián)專注于福建網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供福建營銷型網(wǎng)站建設,福建網(wǎng)站制作、福建網(wǎng)頁設計、福建網(wǎng)站官網(wǎng)定制、小程序制作服務,打造福建網(wǎng)絡公司原創(chuàng)品牌,更為您提供福建網(wǎng)站排名全網(wǎng)營銷落地服務。

倍數(shù)

  1. \(a,b,k \in \mathbb N\),且 \(a \times k=b\),那么 \(b\)\(a\) 的倍數(shù),稱 \(a\) 整除 \(b\),記作 \(a \mid b\)。

  2. \([1,n]\in \mathbb N\)\(x \in \mathbb N\) 的倍數(shù)有 \(\left \lfloor \dfrac{n}{x} \right \rfloor\) 個。

約數(shù)

  1. \(a \mid b\)\(a,b\in\mathbb N\),那么 \(a\)\(b\) 的約數(shù)。

  2. \(a \in \mathbb N\) 的約數(shù)個數(shù)是有限的,記作 \(\operatorname d(n)\)\(\in \mathbb Z\)。

  3. 快速算一個序列的 \(\operatorname d(n)\):設一個計數(shù)數(shù)組對應每個數(shù),初始為 0,從左到右計算每個數(shù),對于每個倍數(shù)加 1,當整個序列計算完后,計數(shù)數(shù)組的值是其對應數(shù)字的約數(shù)個數(shù),時間復雜度 \(\mathcal{O}(n\log n)\) 下面是一個例子以及代碼實現(xiàn)。

n    1  2  3  4  5  6
d(n) 0  0  0  0  0  0  start
    +1 +1 +1 +1 +1 +1  step 1 in number 1
     0 +1  0 +1  0 +1  step 2 in number 2
     0  0 +1  0  0 +1  step 3 in number 3
     .....and more
     1  2  2  3  2  4  end
void approximate_number(long long *num,long long &to){
	for(long long i=1;i<=to;++i)
		for(long long j=i;j<=to;j+=i)
			(*(num+j))++;
}

素數(shù)

  1. 1 不是素數(shù)也不是合數(shù)。

  2. 下面是一串判斷 \(n\in \mathbb N\) 是否是素數(shù)的代碼,時間復雜度 \(\mathcal{O}(\sqrt n)\)

bool is_prime(long long &n){
	if(n==1)	return false;
	for(long long i=2;i<=n/i;++i)
		if(n%i==0)	return false;
	return true;
}
  1. 計算一個序列每個數(shù)是否是素數(shù):樸素篩法,有較多重復判斷,時間復雜度 \(\mathcal{O}(n\log n)\);埃式篩法,僅是素數(shù)才向后篩,優(yōu)化樸素篩法,時間復雜度 \(\mathcal{O}(n\log\log n)\),接近線性篩。

最大公約數(shù)

  1. \(a,b\in \mathbb N\)\(k \mid a,b \in \mathbb N\),且不存在更大的 \(k\),稱 \(k\)\(a,b\) 的最大公約數(shù)。

  2. 快速求 \(a,b\in \mathbb N\) 的最大公約數(shù),歐幾里得定理:\(\gcd(a,b)=\gcd(b,a \bmod b)\)。

  3. 已知 \(a,b \in \mathbb N\),可找到 \(x,y \in \mathbb Z\) 使 \(a\times x +b\times y=\gcd(a,b)\),若 \(a\times x+b\times y=1\) 有解,則 \(a\)\(b\) 互質(zhì)。

  4. 擴展歐幾里得,一定存在 \(x,y\in \mathbb N\) 使貝祖等式 \(a\times x +b\times y=\gcd(a,b)\)\(\Rightarrow (\left \lfloor a \div b \right \rfloor \times b + a \bmod b) \times x + b\times y = \gcd(b,a\bmod b)\)\(\Rightarrow (\left \lfloor a \div b \right \rfloor \times x + y)\times b +(a \bmod b)\times x\),可得新的方程 \(b \times x'+(a \bmod b)\times y' = \gcd(b,a\bmod b)\) 因此可得 \(\begin{cases}x'=(\left \lfloor a \div b \right \rfloor\times x+y)\\y'=x\end{cases}\),同樣倒推可得特解 \(\begin{cases}x=y'\\y=x'-(\left \lfloor a \div b \right \rfloor\times y')\end{cases}\),下面是遞歸代碼實現(xiàn)。

#include
array exgcd(long long &a,long long &b){
	if(b==0)	return {1,0,a};
	//當b=0時,等式為ax=gcd(a,0),即ax=a
	//得x=1,y=0
	array ans=exgcd(b,a%b);
	long long temp=ans[0];
	ans[0]=ans[1];
	ans[1]=temp-a/b*ans[1];
	return ans;//ans[0]為x,ans[1]為y,ans[2]為gcd(a,b)
}
  1. 當求得貝祖等式特解 \(x_0,y_0\in \mathbb N\) 后,可得 \(x,y\in \mathbb N\) 通解,設 \(g=\gcd(a,b)\) 通解為 \(\begin{cases}x=x_0+t\times b\div g\\y = y_0- t \times a \div g\end{cases}\),推導過程:\(\begin{cases}a\times x+b\times y=g\\a\times x_0+b\times x_0=g\end{cases}\)\(\Rightarrow (x-x_0)\times a+(y-y_0)\times b=0\)\(\Rightarrow (x-x_0)\times a=(y_0-y)\times b\)\(\Rightarrow (x-x_0)\times \dfrac{a}{g}=(y_0-y)\times \dfrac{g}\)\(\Rightarrow \begin{cases}x-x_0=t\times \dfrac{g}\\y_0-y=t \times \dfrac{a}{g}\end{cases}\)\(\Rightarrow \begin{cases} x=x_0+t\times\dfrac{g}\\y=y_0-t\times\dfrac{a}{g}\end{cases}\),其中 \(x\) 的第一個解是 \(\bigg(x\bmod\dfrac{g}+\dfrac{g}\bigg)\bmod \dfrac{g}\)。

模運算

  1. 已知 \(a,b,p\in \mathbb N\),\((a+b)\bmod p=(a\bmod p+b\bmod p)\bmod p\)\((a-b)\bmod p=(a\bmod p+b\bmod p)\bmod p\),\((a\times b)\bmod p=(a \bmod p\times b\bmod p)\bmod p\)

  2. 若需要進行除法的模運算,與普通的不同,例子:\(\dfrac{20}{10}\bmod 5 \neq \dfrac{20 \bmod 5}{10\bmod 5}\bmod 5\),所以為了求 \((a\div b) \bmod p\),\(a,b,p\in\mathbb N\),需要找到 \(b\) 的乘法逆元 \(x\in\mathbb N\),將算式變成 \((a\times x)\bmod p\)

  3. 已知 \(a,x,m\in \mathbb N\),\(ax \equiv 1\pmod p\)\(\Rightarrow ax \bmod p=1\)\(\Rightarrow ax-\left\lfloor\dfrac{ax}{p}\right\rfloor\times p=1\),稱 \(x\) 是關于 \(a\) 的乘法逆元,將 \(-\left\lfloor\dfrac{ax}{p}\right\rfloor\)\(y\) 替代,得 \(ax+py=1\),即找到 \(x\) 的值即可找到 \(a\) 的乘法逆元,也可知 \(a,p\) 必須要互質(zhì)。

  1. \(a^b\),\(a,b\in \mathbb N\),暴力:重復乘 \(b\)\(a\),時間復雜度 \(\mathcal{O}(b)\),可以優(yōu)化。

  2. 快速冪,時間復雜度 \(\mathcal{O}(\log b)\),采用分治思想,對于一個 \(a^b\),\(a,b\in \mathbb {N^*}\),若 \(b\) 為復數(shù),可推 \(a^b=a^{2^{b\div 2}}\),若 \(b\) 為奇數(shù),分出一個 \(a\),可推 \(a^b=a^{2^{(b-1)\div 2}}\times a\),例子: \(a\leftarrow 5,b\leftarrow 6\),\(a^b=5^6=5^{2^3}=25^3=25^2\times 25=125\times 25\),易發(fā)現(xiàn) \(a^b\) 就是求分治過程中被分出來的 \(a\) 的積,以下是代碼實現(xiàn)。

long long quick_pow(long long a,long long b){
	long long ans=1;
	while(b>0){
		if(b&1)	ans*=a;
		a*=a;
		b>>=1;
	}
	return ans;
}

當前標題:數(shù)論入門、歐幾里得及其擴展
網(wǎng)址分享:http://weahome.cn/article/dsoiiee.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部