求解s(k): 將整數m拆分為n個數字的有序拆分方案數為c(m-1,n-1)
隔板法理解:
把n分成乙份的分法數為c(0,n-1),
把n分成兩份的分法數為c(1,n-1),
把n分成三份的分法數為c(2,n-1),
.... ,
把n分成n份的分法數為c(n-1,n-1)。
s(1)+s(2)+…+s(n) = c(0,n-1)+c(1,n-2)+…+c(n-1,n-1) = 2^n-1
由此求解2^n-1
由於n上限非常大,可以用費馬小定理(若a,p互質,a^(p-1)%p=1)化簡。
可以把n-1分解成t個p-1,剩餘m,則2^(n-1)%mod可化為 2^m%mod
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#if __cplusplus >= 201103l
#include
#include
#endif
#define ll long long
#define int long long
using
namespace std;
const
int inf =
0x3f3f3f3f
;const
int mod =
1e9+7;
intquick_pow
(int a,
int b)
a=(a*a)
%mod;
b>>=1;
}return res;
}signed
main()
// res=(res-1+mod-1)%(mod-1);
// coutquick_pow(2
,res-1)
<}return0;
}
hdu 4704 Sum(費馬小定理)
題意 求乙個正整數n拆分成1到n個正整數的和,有多少種拆法 3 2 1和3 1 2算2種不同的拆法 1 n 10 100000 數學不太行呀,還好隊友給力 題意轉換為求2 n 1 不過n好大 由費馬小定理,得2 10 9 6 10 9 7 1 2 0,設mod 10 9 7,則2 n 1 mod 2...
hdu 4704 sum(費馬小定理)
題意 給你乙個數n,求1 n之間的 x可以劃分不超過k個整數的和 的種類 的和 例如 n 4 s 1 3,s 2 5 通過前幾組資料 1 2 3 4 5 6 1 2 4 8 16 32 可以發現答案就是2 n 1 1000000007 2 n 1 1000000007 2 n 1 100000000...
HDU 4704 Sum 費馬小定理 快速冪
題意 把n分成若干個數相加有幾種分法。1 把n分成若干個數 類似排列組合問題,把n個數分成若干個數,在n個數中間插板,有n 1個空位,一共2 n 1 種分法 2 降冪 題目中最後mod 10 9 7 10 9 7是素數。與費馬小定理相聯絡 前提 m是質數 化簡 費馬小引理 所以 3 還需要用到快速模...