【快速幂】小明解密码 (jzoj 2146)
生活随笔
收集整理的這篇文章主要介紹了
【快速幂】小明解密码 (jzoj 2146)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
小明解密碼
題目大意
讓你計算n^m的個位(有t組數據)
樣例輸入
2
3 4
4 5
樣例輸出
1
4
數據范圍限制
對于30%的數據,1≤t≤20,1≤n,m≤8
對于100%的數據,1≤t≤1000,1≤n,m≤10^10
解題方法
這題其實有兩種方法,一種是運用個位的規律直接得出結果(這里我就不詳細說明了),另一種是我們一想就可以想到的“冪”,但從數據m<=101010^{10}1010可以得知,我們要用快速冪(注意輸入要用long long,因為101010^{10}1010>2147483647)
快速冪:
就是將一個冪的指數分成兩份如:n10n^{10}n10=n5n^{5}n5×n5n^{5}n5(因為都是10個n相乘),但當指數為奇數時,就要多成一個n,如:n11n^{11}n11=n5n^{5}n5×n5n^{5}n5×n
#include<cstdio> #include<iostream> using namespace std; int t; long long n,m,ans; void ksm(long long x) {if (x==1)//判斷是否為一次方{ans=n;//一次方即為本身return;}ksm(x/2);//指數除以2long long d=1;if (x&1) d=n;//如果x為奇數,多乘一個nans=(ans*ans*d)%10;//相乘 } int main() {scanf("%d",&t);//數據的組數for (int i=1;i<=t;i++){scanf("%lld %lld",&n,&m);n%=10;//求各位ksm(m);//快速冪printf("%lld\n",ans);//輸出}return 0; }總結
以上是生活随笔為你收集整理的【快速幂】小明解密码 (jzoj 2146)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何唱出好声音如何唱出好声音高音
- 下一篇: 没了恢复选项怎么办没办法恢复