近期学了一下简单数论,整理一下。函数
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
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. 求欧拉函数
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]]; } } }
简单的推一波式子:
$\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}$便可。
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; }
首先咱们把左下角的点看作(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); }
给你一个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的前缀和而后套数论分块就行了。