hdu 4059 The Boss on Mars(容斥)
定義S = 1^4 + 2^4 + 3^4+.....+n^4,現在減去與n互質的數的4次方,問共減少了多少。
容斥原理,可以先把與n不互質的數的4次方求出來。那就先對n進行質因子分解,對質因子的組合運用容斥原理,質因子個數為奇數就加,偶數就減。其實與求[1,n]內與n互質的數的個數類似,該題重點是計算,防止乘法溢出。
對於求解1^4 + 2^4 + 3^4+.....+n^4,可以先類比1^2+2^2+...+n^2的求法,那麼求4次方,
首先(n+1)^5= n^5 + 5*n^4 + 10*n^3 + 10*n^2 + 5*n^1 + 1.
那麼2^5 = (1+1)^5 = 1^5 + 5*1^4 + 10*1^3 + 10*1^2 + 5*1^1 + 1.
3^5 = (2+1)^5 = 2^5 + 5*2^4 + 10*2^3 + 10*2^2 + 5*2^1 + 1.
........
........
(n+1)^5 = n^5 + 5*n^4 + 10*n^3 + 10*n^2 + 5*n^1 + 1.
將上述所有等式相加,兩邊抵消相同項,得到(n+1)^5 = 5*(1^4+2^4+……n^4)+10*(1^3+2^3+……+n^3)+10*(1^2+2^2+……+n^2)+5*(1+2+……+n)+n+1,
將1^3+2^3+……+n^3 = (n+1)^2*n^2/4和1^2+2^2+……+n^2 = (n*(n+1)*(2*n+1))/6帶入上式,化簡得到:
1^4+2^4+……n^4 = (n*(n+1)*(2n+1)*(3*n*n+3*n-1))/30。
因為要取余,要求30對1000000007的逆元,用擴展歐幾裡得即可。
#include
#include
#include