數論學習筆記(一)

近期學了一下簡單數論,整理一下。函數


1、算數基本定理:

1.定義: 一個大於1的正整數$N$, 標準分解式 $$N=p_1^{a_1}p_2^{a_2}···p_n^{a_n}$$ui

2.性質:spa

  • 正因數個數 $$d(N)=(a_1+1)(a_2+1)...(a_n+1)$$code

  • 正因數和 $$\sigma(N)=(1+p1+p1^2+...+p1^{a1})(a+p2+...+p2^{a2})...(1+pn+pn^2+pn^{an})$$ci


2、歐拉函數:

1. 定義:$\varphi(x)$表示小於x的數中有多少個數與x互質get


2. 通式: $$\varphi(x)=x\prod_{i=1}^{n}({1-\frac{1}{p_i}})\text{(p表示x的質因數)}$$class

如何理解?gc

首先舉個栗子:$12=2^2·3 \quad \varphi(12)=12·(1-\frac{1}{2})·(1-\frac{1}{3})$im

用容斥的思想:12裏有$\frac{1}{2}$的數是2的倍數,也有$1-\frac{1}{2}$的數不是2的倍數。(1,3,5,7,9,11)集合

那麼這6個數中,又有$\frac{1}{3}$的數是3的倍數。

因此,有$(1-\frac{1}{2})·(1-\frac{1}{3})$的數既不2的倍數,也不是3的倍數。

這樣一來,通式也就好理解了!

x中有$(1-\frac{1}{p_1})(1-\frac{1}{p_2})...(1-\frac{1}{p_n})$個數知足$p_1...p_n$均不是其因子,即與x互質。


3.性質:

① 對質數p,$\varphi(p)=p-1$

$$\text{p是質數,因此1...p-1都與p互質。}$$

② 若n惟一分解$;n=p^k$,那麼

$$\varphi(n)=n(1-\frac{1}{p})=p^k(1-\frac{1}{p})=p^k-p^{k-1}$$

③ 歐拉函數是積性函數,若$a,b$互質,

$$\varphi(ab)=\varphi(a)\varphi(b)$$

n爲質數時,

$$\varphi(2n)=\varphi(2)\varphi(n)=\varphi(n)$$

④ 歐拉定理:對於互質整數$a,m$,有

$$a^{\varphi(m)}\equiv1(mod;m)$$

費馬小定理:對質數$p$,

$$a^p=1(mod;p)$$

⑤ 小於n的數中,與n互質的數的總和爲:

$$\varphi(n)*n/2(n>1)$$

⑥ $$\mathbf{n=\sum_{d|n}\varphi(d)}$$

由於是一條很是重要的性質,因此我本身想法子證實了一波:

$\text{令}f(n)=\sum_{d|n}^{}\varphi(d)$

$\text{則}f(p_i^{k})=\varphi(1)+\varphi(p_i)+\varphi(p_i^{2})+\varphi(p_i^{3})+...+\varphi(p_i^{k})$

$\quad \quad\quad ;;;=1+(p_i-1)+(p_i^{2}-p_i)+(p_i^{3}-p_i^{2})+...+(p_i^{k}-p_i^{k-1})$

$\quad \quad\quad ;;;=p_i^{k}$

設$n=p_1^{e_1}*p_2^{e_2}p_3^{e_3}...*p_k^{e_k}$

∴ $\sum_{d|n}\varphi(d)=f(n)$

$\quad\quad\quad\quad\quad;=f(p_1^{e_1}*p_2^{e_2}p_3^{e_3}...*p_k^{e_k})$

$\quad\quad\quad\quad\quad;=f(p_1^{e_1})*f(p_2^{e_2})f(p_3^{e_3})...*f(p_k^{e_k})$

$\quad\quad\quad\quad\quad;=p_1^{e_1}*p_2^{e_2}p_3^{e_3}...*p_k^{e_k}$

$\quad\quad\quad\quad\quad; =n$

證畢。


再放一下大佬的證實:

考慮1...n的全部整數,若$gcd(i,n)=d$,即$gcd(\frac{i}{d},\frac{n}{d})=1$

又 $\frac{i}{d}$ 是不超過 $\frac{n}{d}$ 的整數。

∴ 這樣的 $i$ 有 $\varphi(\frac{n}{d})$ 個

∵ $d|n$,咱們也就考慮到了全部的d。

即:${n= \sum_{d|n}\varphi(\frac{n}{d})}=\sum_{d|n}{\varphi(d)}$

⑦ 若p是質數

$$\begin{cases}\varphi(ip)=p\varphi(i)\quad(i;mod;p;=0)\\varphi(ip)=p-1\varphi(i)\quad(otherwise)\end{cases}$$

第二個式子很好理解,p是質數,i不是p的倍數,即i與p互質。

第一個式子,根據通式可得:

$$\varphi(ip)=pi*\prod_{i∈S_{i*p}}{\frac{p_i-1}{p_i}}\text{(S表示n的質因子集合)}$$

由於$p$是$i$的質因子,因此$S_i=S_{i*p}$。

因此

$$i*\prod_{i∈S_{ip}}{\frac{p_i-1}{p_i}} = i\prod_{i∈S_{i}}{\frac{p_i-1}{p_i}} = \varphi(i)$$

$$\varphi(ip)=p\varphi(i)$$


4. 求歐拉函數

  • 單個求: 直接根據定義在$\sqrt{x}$範圍枚舉x的質因子便可。複雜度$O(\sqrt{n})$
inline int phi(int x)
{
	int ret=x;
	for(int i=2;i*i<=x;i++)
	{
		if(x%i==0) ret=ret/i*(i-1);
		while(x%i==0) x/=i;
	}
	if(x>1) ret=ret/x*(x-1);
	return ret;
}
  • 篩法求:

由於積性函數$\varphi(ab)=\varphi(a)\varphi(b)\quad (a \perp b )$

歐拉篩中每次篩$i*prime[j]$,因此咱們能夠在歐拉篩中線性求積性函數。

關於$phi[i*prime[j]]$的值,見性質中最後一條。

inline void Pre()
{
	notpr[1]=phi[1]=1;
	for(int i=2;i<=n;i++)
	{
		if(!notpr[i]) prime[++cnt]=i,phi[i]=i-1;
		for(int j=1;j<=cnt&&i*prime[j]<=n;j++)
		{
			notpr[i*prime[j]]=1;
			if(i%prime[j]==0)
			{
				phi[i*prime[j]]=phi[i]*prime[j];
				break;
			}
			else phi[i*prime[j]]=phi[i]*phi[prime[j]];
		}
	}
}

既然理論知識已經基本瞭解了,咱們來搞幾道題。

1、P2303 [SDOi2012]Longge的問題

簡單的推一波式子:

$\sum_{i=1}^{n}gcd(i,n)$

$=\sum_{d|n}\sum_{i=1}^n([gcd(i,n)=d]·d)$

$=\sum_{d|n}d\sum_{i=1}^{\frac{n}{d}}[gcd(i,\frac{n}{d})=1]$

$=\sum_{d|n}d·\varphi(\frac{n}{d})$

而後單個求歐拉函數就行了,注意枚舉到$\sqrt{n}$便可。

code:

int main()
{
	cin>>n;
	for(ll i=1;i*i<=n;i++)
	{
		if(i*i==n){ans+=i*phi(i);break;}
		if(n%i==0) ans+=i*phi(n/i)+(n/i)*phi(i);
	}
	cout<<ans;
}

2、P2158 [SDOI2008]儀仗隊

首先咱們把左下角的點看作(0,0)點。

咱們要求的也就是有多少條過(0,0)點的不重合的形如$y=kx$的直線。

也就是求有多少個不一樣的k值。

設$P(x,y),\quad k=\frac{y}{x}$

首先k值不一樣當且僅當(x,y)互質。

又不一樣的互質數相除得數確定不一樣。

因此咱們要求的就是n範圍內有多少對(x,y)互質。

即$\sum_{x=1}^{n-1}\sum_{y=1}^{x-1}[gcd(x,y)=1]$

$=\sum_{x=1}^{n-1}\varphi(x)$

$\varphi(n)$表示小於n的數裏與n互質的數,也就是說咱們只求了x>y的狀況,須要再把結果*2。

而後注意一下(1,0),(0,1),(1,1)這三個點的特判。

int main()
{
	read(n);Pre();
	if(n==1){puts("0");return 0;}
	for(int i=2;i<n;i++) ans+=phi[i]*2;
	W(ans+1);
}

3、P1447 [NOI2010]能量採集

給你一個n·m的方陣,問每一個點與原點的連線中有多少點(不包括橫縱座標爲0的)*2+1再求和,

$\sum_{x=1}^{n}\sum_{y=1}^{m}gcd(x,y)*2-1$

$2*(\sum_{x=1}^{n}\sum_{y=1}^{m}gcd(x,y))-n*m$

咱們只考慮一下中間那個東西:

$;;;\sum_{x=1}^{n}\sum_{y=1}^{m}gcd(x,y)$

$=\sum_{i=1}^n\sum_{j=1}^{m}\sum_{d|gcd(i,j)}\varphi(d)$

$=\sum_{d=1}^{n}\varphi(d)·(n/d)·(m/d)$

求一下phi的前綴和而後套數論分塊就行了。

4、P2568 GCD

5、P2398 GCD SUM

相關文章
相關標籤/搜索