~{→看不见LaTex格式的Dalao们请刷新本页Thanks♪(・ω・)ノ←}~
2019寒假集训题
A.GUGUFISHTION
题面
给出$m,n,p$,求:$\sum_{a=1}^m\sum_{b=1}^n\frac {\phi(ab)}{\phi(a)\phi(b)}\ mod\ \ p$
Input
第一行一个$T$代表组数。
之后的$T$行,每行包含三个整数$m,n,p$。
数据保证$p$是一个质数。
Output
输出$T$行,每行只有一个整数表示答案。
Sample Input
1
5 7 23
Sample Output
2
Hint
$1\leq T \leq 3$
$1\leq m,n\leq1,000,000$
$max(m,n)< p \leq 10^9+7$
由欧拉函数的性质$\phi(p^k)=(p-1)×p^{k-1}(p为质数)$。
令$d=gcd(a,b)=p_1^{k_1}×p_2^{k_2}×…×p_n^{k_n}$。
$G_u(a,b)=\frac {\phi(a,b)}{\phi(a)\phi(b)}=\frac{\phi(p_1^{2k_1}×p_2^{2k_2}×…×p_n^{2k_n})}{\phi(p_1^{k_1}×p_2^{k_2}×…×p_n^{k_n})^2}$
由于欧拉函数为积性函数,且因为各项上下互质,展开约去。
$G_u(a,b)=\frac {(p_1-1)×(p_2-1)×(p_3-1)×…×(p_n-1)×p_1^{2k_1-1}×p_2^{2k_2-1}×…×p_n^{2k_n-1}}{(p_1-$1)^2×(p_2-1)^2×(p_3-1)^2×…×(p_n-1)^2×p_1^{k_1-1}×p_2^{k_2-1}×…×p_n^{k_n-1}}$
$=\frac {p_1×p_2×p_3×…×p_n}{(p_1-1)×(p_2-1)×…×(p_n-1)}=\frac {p_1×p_2×p_3×…×p_n×p_1^{k_1-1}×p_2^{k_2-1}×…×p_n^{k_n-1}}{(p_1-1)×(p_2-1)×(p_3-1)×…×(p_n-1)×p_1^{k_1-1}×p_2^{k_2-2}×…×p_n^{k_n-1}}$
$=\frac {p_1^{k_1}×p_2^{k_2}×…×p_n^{k_n}}{\phi(p_1^{k_1}×p_2^{k_2}×…×p_n^{k_n})}=\frac {d}{\phi{d}}$
令$a[i]=\frac i{\phi(i)}$,$f(m,n)=\sum_{a=1}^m\sum_{b=1}^nG_u(a,b)=\sum_{a=1}^m\sum_{b=1}^na×d$
$f(m,n)=\sum_{d=1}^{min(m,n)}\sum_{a=1}^m\sum_{b=1}^na[t]×[d==t]=\sum_{d=1}^{min(m,n)}\sum_{a=1}^{\lfloor \frac mt\rfloor}\sum_{b=1}^{\lfloor \frac nt\rfloor}a[t]×[d==1]$
$[到此处d的定义取消,懒得修改,写完发现不对了]$╮(╯▽╰)╭
令$g(m,n)=\sum_{a=1}^m\sum_{b=1}^n[d==1]=\sum_{a=1}^m\sum_{b=1}^n\sum_{d|gcd(a,b)}\mu(d)=\sum_{d=1}^{min(a,b)}\mu(d)×\frac md×\frac nd$
因为有:
$\sum_{d|n}\mu(d)=1\ \ (n==1)$
$\sum_{d|n}\mu(d)=0\ \ (n>1)$
当$gcd(a,b)==1$,则$\sum_{d|gcd(a,b)}\mu(d)=1$;
当$gcd(a,b)\ !\ =1$,则$\sum_{d|gcd(a,b)}\mu(d)=0,=[gcd(a,b)==1]$。
因为$\frac md$表示在$a∈[1,m]$中能被$d$整除的数的个数,$\frac nd$表示在$b∈[1,n]$中能被$d$整除的数的个数。
所以,可证等价。
所以有$f(m,n)=\sum_{d=1}^{min(m,n)}a[t]×(\sum_{a=1}^{\lfloor \frac mt\rfloor}\sum_{b=1}^{\lfloor \frac nt\rfloor}[d==1])=\sum_{d=1}^{min(m,n)}a[t]×g(\frac mt,\frac nt)$。
时间复杂度
$\frac n1+\frac n2+\frac n3+\frac n4+…+\frac n{n-1}+\frac nn=nln(n)+C(C为欧拉函数)$
没想平均时间复杂度为$O(ln(n))$,所以总时间复杂度为$O(nln(n))$。
CODE:
因为总有$\phi(i)<i$,预处理出$max(m,n)$个逆元即可。
1 |
|