hdu 4059 容斥原理 通項公式

2022-05-24 10:45:07 字數 1057 閱讀 1617

其實這道題目的難點不在容斥原理,在於大數越界、取餘等等的細節

首先求出通項公式為

n(2n+1)(n+1)(3n² +3n-1)/30
求(a/b)%mod有兩種方法
1、原式=a%(b*n)/b
2、原式=a*b^(phi(mod)-1)%mod;(其中b與mod互質)
本題中,由於mod過大,採用第一種方法會出錯,於是用了第二種方法。
容斥過程中比如要加上2的四次,4的四次,6的四次。。。。可把2的四次提取出來,另外一項就變成了四次方和了

view code

#include

#include

#include

#include

using

namespace std;

const __int64 mod = 1000000007;

__int64 n;

__int64 power(__int64 a,__int64 b,__int64 c)

return ret;

}__int64 calc(__int64 n)

__int64 sici(__int64 n)

return sum;

}__int64 solve(__int64 r,__int64 n)

}if(r>1) p.push_back(r);

__int64 sum=0;

for(__int64 num=1;num

<1,ones=0;

for(i=0;iif(num&(1

=mod) mult%=mod;}}

if(ones%2) sum+=sici(mult)*calc(n/mult);

else sum-=sici(mult)*calc(n/mult);

sum%=mod;

}return sum;

}int main()

return

0;}

hdu 4336 容斥原理

按照解題報告的提示,用容斥原理實現 for int j bg 1 j另解 概率dp,康哥指導的 include include includeusing namespace std double f 1 21 gl 22 int main int i,j,k,n double fz,fm while...

hdu4135 容斥原理

題意 給出a,b,n,求出 a,b 範圍內與n互素的數字的個數。即b範圍內的不與n互素的數減去a範圍內不與n互素的數,把 1,a 1,b 中不與n互素的數分別求出來,再減掉就是和n互素的數了。那麼首先將n分解質因數,因子和因子的倍數可以被除盡,一定不與n互素,把這些數都記下來,篩法求素數即可 然後把...

hdu 4135 容斥原理

剛接觸,有關因子個數的增加不太弄得好,然後看到了這個神奇的遞迴 ac include includeusing namespace std define ll long long ll a,b,ansa,ansb,ans,p 100 up void dfs int n,bool tag,ll num...