題意:
這題意看了很久。。
s(k)表示的是把n分成k個正整數的和,有多少種分法。
例如:n=4時,
s(1)=1 4
s(2)=3 1,3 3,1 2,2
s(3)=3 1,1,2 1,2,1 2,1,1
s(4)=1 1,1,1,1
s(1)+s(2)+s(3)+s(4)=1+3+3+1=8
當n=1,2,3,4時,可以分別求出結果為 1,2,4,8
於是推出答案就是2^(n-1)---------------------(為什麼?我也不知道,這個是怎麼推出來的)
思路:題意明白了,就是求2^(n-1) mod(10^9+7)唄。
由於這裡的n非常大,1<=n<10^100000,這裡用簡單的暴力絕對超時啊(10^8就會超時)
那麼,這裡用了兩個優化,乙個是費馬小定理 a^(p-1)≡1(mod p),另外就是快速冪加速求冪
這裡稍微演示一下如何利用費馬小定理處理:
(單單用費馬小定理處理仍會超時,因為處理完後,指數最大能達到10^9級別,仍會超時)
**:
#include#include#includeusing namespace std;const int mod=1e9+7;
void pow(__int64 b)
printf("%i64d\n",ans);
}int main(){
char str[123456];
__int64 num,i;
while(~scanf("%s",str)){
num=0;
int len=strlen(str);
for(i=0;i
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 還需要用到快速模...