水篇快速冪

2021-09-26 02:50:55 字數 1633 閱讀 4736

一,快速冪:取冪指數的二進位制,從低到高尋找,當前位= 1時,加上當前位對應的值,複雜度順利降到o(logn)

//b=1000001101(二進位制)

//a^b=a^0+a^2+a^3+a^9

//o(log2(b))

typedef long long ll;

ll qpow(ll a,ll b) //a^b

return res;

}

二,矩陣快速冪:變遞推加法為矩陣冪的形式,推出矩陣直接套板子即可

const int mod=1e9+7;

typedef long long ll;

struct pl;

pl mul(pl a,pl b)

return res;

}

三,試試板子能不能用

1,斐波那契數列,求第n項值(mod 1e9+7);

#include using namespace std;

const int mod=1e9+7;

typedef long long ll;

struct pl p;

pl mul(pl a,pl b)

} }return res;

}pl qpow(pl a,ll k)

return res;

}//[f(n-1),f(n-2)] * 矩陣a = [f(n),f(n-1)]

//故f(n) = a^(n-2) * [f(2),f(1)]

void init()

ll solve(ll n)

}int main()

return 0;

}

2,再來個超級麻煩的:f(n)=f(n-1)+f(n-2)*2+n^4;

#include #include using namespace std;

typedef long long ll;

const int mod = 2147493647;

struct pl;

pl p=;

pl work(pl work,pl y) //矩陣乘法}}

return box;

}pl fastpow(pl b,ll kk) //快速冪

return ans;

}int main()

if(n==2)

pl pp=fastpow(p,n-2);

ll ans=pp.a[0][0]*b%mod;

ans=(ans+pp.a[1][0]*a%mod)%mod;

ans=(ans+pp.a[2][0]*16%mod)%mod;

ans=(ans+pp.a[3][0]*8%mod)%mod;

ans=(ans+pp.a[4][0]*4%mod)%mod;

ans=(ans+pp.a[5][0]*2%mod)%mod;

ans=(ans+pp.a[6][0]*1%mod)%mod;

printf("%lld\n",ans);

} return 0;

}

水不動了,先咕著自己,咕咕咕,,,,

C 演算法篇 快速冪

讓我們先來思考乙個問題 7的10次方,怎樣算比較快?方法1 最樸素的想法,7 7 49,49 7 343,一步一步算,共進行了9次乘法。這樣算無疑太慢了,尤其對計算機的cpu而言,每次運算只乘上乙個個位數,無疑太屈才了。這時我們想到,也許可以拆分問題。方法2 先算7的5次方,即7 7 7 7 7,再...

快速冪水題 計數(數論)

求 a 的 b 次方,即 但是我們知道,當求到 所以,根據這個式子,可以列出遞迴 long long mod 模數 templatet long long qkpow long long a,t b 給定n,m,k都是小於10001的正整數,輸出給定的n個數中,其m次冪能被k整除的數的個數。輸出滿足...

快速冪 普通快速冪 矩陣快速冪

題意 n個人排隊,f表示女,m表示男,包含子串 fmf 和 fff 的序列為o佇列,否則為e佇列,有多少個序列為e佇列。分析 矩陣快速冪入門題。下面引用巨巨解釋 用f n 表示n個人滿足條件的結果,那麼如果最後乙個人是m的話,那麼前n 1個滿足條件即可,就是f n 1 如果最後乙個是f那麼這個還無法...