[HDU 4704] Sum · 費馬小定理 & 快速冪
阿新 • • 發佈:2019-01-01
題意:給定n,設是將n分成k個數之和的方案數,求
隔板原理:將n個物品分成k組,相當於在n-1個間隔中插入k-1個隔板,方案數為,所以等於,貌似是叫二項式定理來著?反正這個式子的值等於,所以就是要求的值。
但是因為n非常大,所以用費馬小定理降冪。
科普:費馬小定理:
然後快速冪直接搞起。
這題是多測!
#include <cstdio> #include <cstring> #include <iostream> #include <cstdlib> #include <algorithm> #include <cmath> using namespace std; #define ll long long const ll mod=1e9+7; const ll phi=mod-1; ll n; char s[200005]; void calc(){ n=0; for (int i=0;s[i]!='\0';i++) n=(n*10+s[i]-'0')%phi; n+=phi; n--; } ll mult(ll n){ ll ret=1,t=2; for(;n;n>>=1,t=(t*t)%mod) if (n&1) ret=(ret*t)%mod; return ret; } int main(){ while(~scanf("%s",s)){ calc(); cout<<mult(n)<<endl; } return 0; }