生活随笔
收集整理的這篇文章主要介紹了
NYOJ 640 Geometric Sum
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Geometric Sum
時間限制:
1000?ms ?|? 內存限制:
65535?KB 難度:
3
描述
Compute (a + a^2 + … + a^n) mod m.
輸入Three integers a,n,m.
(1≤a,n,m≤10^18)
It ends with EOF.輸出The only integer denotes the result.樣例輸入 2 2 1000000000 樣例輸出 6 別人的AC碼:
#include <stdio.h>
typedef long long LL;
LL Mod;
LL multMod(LL a,LL b)
{LL res = 0,base = a;while(b){if(b&1)(res += base) %= Mod;(base <<= 1) %= Mod;b >>= 1;}return res;
}LL powerMod(LL a,LL n)
{LL res = 1 , base = a;while(n){if(n&1)res = multMod(res,base);base = multMod(base,base);n >>= 1;}return res;
}LL solve(LL a,LL n)
{if(n == 1)return a;LL halfsum = solve(a,n >>1);if(n&1){LL half = powerMod(a,n+1 >>1);return (halfsum + half + multMod(half,halfsum)) % Mod;}else{LL half = powerMod(a,n >>1);return (halfsum + multMod(half,halfsum)) % Mod;}
}int main()
{LL a,n;while(~scanf("%lld%lld%lld",&a,&n,&Mod)){a %= Mod;printf("%lld\n",solve(a,n));}return 0;
}
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的NYOJ 640 Geometric Sum的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。