Vue路由的配置
阿新 • • 發佈:2020-12-15
定義:\(\varphi(n)\) 表示 \(n\) 以內與 \(n\) 互質的數的個數。
有:
\[n=\sum_{d|n}\varphi(d) \]\[\varphi({p_i}^{k_i})={p_i}^{k_i}-{p_i}^{k_i-1} \]\[\varphi(n)=n\times \prod_{i=1}^s \frac{p-1}{p} \]可以自己證一下,挺好玩的,若是不會可以看 OIWiKi。
由於是積性函式,由:
-
\(\varphi(1)=1\)
-
\(\varphi(p)=p-1,p\in prime\)
-
\(\varphi(p^k)=\varphi(p^{k-1})\times p\)
-
\(\varphi(i)=\varphi(p)\times \varphi(\frac{i}{p})\),其中 \(p\) 是 \(i\) 的最小質因子。
也就是說,只有在處理 \(\varphi(p^k)\) 這一項上和莫比烏斯函式不同。
那麼線性篩程式碼也很好寫了。
沒有模板題,但是應當沒有寫錯。
#include <stdio.h> #define LL long long using namespace std; const int N=1e7+3; inline LL rin() { LL s=0; bool bj=false; char c=getchar(); for(;(c>'9'||c<'0')&&c!='-';c=getchar()); if(c=='-')bj=true,c=getchar(); for(;c>='0'&&c<='9';c=getchar())s=(s<<1)+(s<<3)+(c^'0'); if(bj)s=-s; return s; } bool pri[N]; int var[N]; int d[N]; int tail; int main() { int n=rin(); var[1]=1; for(int i=2;i<=n;i++) { if(!a[i])d[++tail]=i,var[i]=i-1; for(int j=1;j<=tail;j++) { int now=i*d[j]; if(now>n)break; a[now]=true; if(i%d[j]==0) { var[now]=var[i]*d[j]; break; } var[now]=var[i]*var[d[j]]; } } return 0; }