2017年安徽省ACM竞赛J题《看似简单的题目》C++题解----奇数项欧拉函数(带模)的和
今晚花了一晚上终于A掉了这道题?,哈哈???,好快乐呀,做难题果然能让人很快乐???当年省赛时没做出来,今晚终于搞定了,必须得总结下~~~ AC代码在文末给出~?
一、解题思路
首先大家在看这道题前得掌握欧拉定理,欧拉函数phi(n)表示n以内的数中与n互质的数的个数。欧拉函数的通式是 ϕ ( n ) = n ∗ ∑ i = 1 π ( n ) ( 1 − 1 p i ) \phi(n)=n*\sum_{i=1}^{\pi(n)}(1-\frac{1}{p_i}) ϕ(n)=n∗i=1∑π(n)(1−pi1),由于 ϕ ( n ) \phi(n) ϕ(n)是积性函数,当 x , y 互 质 时 , x , y 满 足 ϕ ( x ∗ y ) = ϕ ( x ) ∗ ϕ ( y ) x,y互质时,x,y满足\phi(x*y)=\phi(x)*\phi(y) x,y互质时,x,y满足ϕ(x∗y)=ϕ(x)∗ϕ(y),
又因为n可以通过质因子分解写成 n = ∏ p i k i n=\prod{p_i^{k_i}} n=∏piki,则有 ϕ ( n ) = ϕ ( ∏ p i k i ) = ∏ ϕ ( p i k i ) \phi(n)=\phi(\prod{p_i^{k_i}})=\prod{\phi({p_i^{k_i}})} ϕ(n)=ϕ(∏piki)=∏ϕ(piki)
又有:
ϕ ( a k ) = a k − a k − 1 = a k − 1 ∗ ( a − 1 ) \phi(a^k)=a^k-a^{k-1}=a^{k-1}*(a-1) ϕ(ak)=ak−ak−1=ak−1∗(a−1)
下面就可以正式推导题目中的 f ( n ) f(n) f(n)了
题目中的 f ( n ) f(n) f(n)定义:
f ( n ) = ( ∑ i = 1 n ϕ ( n i ) ) % ( n + 1 ) f(n)=(\sum_{i=1}^{n}\phi(n^i))\%(n+1) f(n)=(i=1∑nϕ(ni))%(n+1)
f ( n ) = [ ϕ ( n ) + ϕ ( n 2 ) + . . . + ϕ ( n n ) ] % ( n + 1 ) f(n)=[\phi(n)+\phi(n^2)+...+\phi(n^n)]\%(n+1) f(n)=[ϕ(n)+ϕ(n2)+...+ϕ(nn)]%(n+1)
f ( n ) = [ ϕ ( ∏ p i k i ) + ϕ ( ( ∏ p i k i ) 2 ) + . . . + ϕ ( ( ∏ p i k i ) n ) ]