HDU 4059 The Boss on Mars ( 容斥原理)
題目連結:
http://acm.hdu.edu.cn/showproblem.php?pid=4059
題意:
給定一個數n求小於n的與n互斥的數的四次方的和。
分析:
我們可以求出從1~n的所有數的四次方的和sum1,然後容斥求出1~n所有與n不互斥的數的四次方的和sum2;
ans =sum1 - sum2;
設f(n)表示從1~n的所有數的四次方的和 f(n)=1/30*n*(n+1)(2n+1)(3n^2+3n-1);
推倒如下:
(n+1)^5-n^5=5n^4+10n^3+10n^2+5n+1
n^5-(n-1)^5=5(n-1)^4+10(n-1)^3+10(n-1)^2+5(n-1)+1
(n-1)^5-(n-2)^5=5(n-2)^4+10(n-2)^3+10(n-2)^2+5(n-2)+1
...
...
...
2^5-1^5=5*1^4+10*1^3+10*1^2+5*1+1
需要用到的公式有
1^2+2^2+...+n^2=n*(n+1)*(2*n+1)/6;
1^3+2^3+...+n^3=n^2*(n+1)^2/4;
然後全部相加起來,經行化簡 就可以就可以得到f(n)
因為要取模,而且有除法因此我們需要求逆元
a^b=1(mod m)
這裡介紹兩種方法
1)
因為30與1000000007互斥 因此由費馬小定理可知這是的逆元為(30^(mod-2))%(mod);
2)
a/b mod m = (a mod (m*b) )/m;
程式碼如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int mod = 1000000007;
typedef long long LL;
int cnt=0;
int a[50];
LL n,inv;
void fen(int n)//素因子分解
{
cnt=0;
for(int i=2;i*i<=n;i++){
if(n%i==0){
a[cnt++]=i;
while(n%i==0)
n/=i;
}
}
if(n>1) a[cnt++]=n;
}
LL multi(LL a,LL b,LL m)
{
LL ans = 0;
while(b){
if(b&1){
ans = (ans + a)%m;
b--;
}
b>>=1;
a=a*2;
if(a>n) a%=m;
}
return ans;
}
LL quick_mod(LL a,LL b,LL m)
{
LL ans = 1;
while(b){
if(b&1){
ans=multi(ans,a,m);
b--;
}
b>>=1;
a=multi(a,a,m);
}
return ans;
}
LL f(LL n)// 四次方和公式:1/30*n*(n+1)(2n+1)(3n^2+3n-1)
{
LL ans=n;
ans=(ans*(n+1))%mod;
ans=(ans*(2*n+1))%mod;
ans=(ans*((3*n*n+3*n-1)%mod))%mod;
ans=(ans*inv)%mod;
return ans;
}
LL solve(LL n)
{
fen(n);
LL ans = 0;
for(int i=1;i<(1<<cnt);i++){
LL tmp = 1;
int tt = 0;
for(int j=0;j<cnt;j++){
if((1<<j)&i){
tmp=tmp*a[j];
tt++;
}
}
LL q=n/tmp;
LL t = multi(multi(tmp,tmp,mod),multi(tmp,tmp,mod),mod);
if(tt&1)
ans=(ans+multi(f(q),t,mod))%mod;
else
ans=(ans-multi(f(q),t,mod)+mod)%mod;
}
return ans;
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
scanf("%I64d",&n);
if(n==1){
puts("0");
continue;
}
inv = quick_mod(30,mod-2,mod);
LL tmp = f(n);
LL ans = solve(n);
ans=(tmp-ans+mod)%mod;
printf("%I64d\n",ans);
}
return 0;
}
相關文章
- HDU4390Number Sequence(容斥原理)
- HDU4407Sum ( 容斥原理)
- HDU 5468 Puzzled Elena(DFS序+容斥原理)
- HDU2841 Visible Trees (容斥原理)
- HDU 1695-GCD(容斥原理+尤拉函式)GC函式
- 容斥原理
- 【模板】容斥原理
- HDU 4135 Co-prime(容斥原理+分解質因數)
- 容斥原理講解
- HDU 4135——Co-prime(容斥原理&&二進位制列舉)
- 遊戲裡面的容斥原理遊戲
- 容斥原理學習筆記筆記
- 容斥原理——數學知識
- #19. 計數(容斥原理)
- HDU 5072 Coprime (單色三角形問題+容斥原理)
- HDU 1695 GCD (容斥 + 莫比烏斯反演)GC
- 容斥
- HDU 5212 Code (容斥 莫比烏斯反演基礎題)
- 反射容斥反射
- bzoj 2655: calc [容斥原理 伯努利數]
- bzoj 3812: 主旋律 [容斥原理 狀壓DP]
- Min-Max 容斥
- lg容斥與反演
- cf449D. Jzzhu and Numbers(容斥原理 高維字首和)
- P1447 [NOI2010] 容斥原理
- 有標號DAG計數 [容斥原理 子集反演 組合數學 fft]FFT
- 容斥定理 AtCoder——FizzBuzz Sum Hard
- P4178 Tree——點分治 容斥
- bzoj1853: [Scoi2010]幸運數字(容斥原理)
- Min-Max 容斥學習筆記筆記
- 利用容斥原理求尤拉計劃565題的S(1E9,2017)
- bzoj1042: [HAOI2008]硬幣購物(Dp+容斥原理)
- [BZOJ4818][Sdoi2017][容斥原理][矩陣優化DP]序列計數矩陣優化
- ZOJ 3868 GCD Expectation (容斥+莫比烏斯反演)GC
- POJ 3904 Sky Code (容斥+莫比烏斯反演)
- 2014ACM/ICPC亞洲區西安站 F題 color (組合數學,容斥原理)ACM
- What time is it on Mars?
- Boss——Boss入場和UIUI