hdu 4704 sum(費馬小定理 快速冪)

2022-03-07 16:50:43 字數 984 閱讀 3144

題意:

這題意看了很久。。

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 還需要用到快速模...