1. 程式人生 > >計蒜客 Give Candies (2的高次冪取模)

計蒜客 Give Candies (2的高次冪取模)

題目意思

大數輸入,求2的n-1次方

解題思路

2的n次方對mod取模會產生mod/2的迴圈,所以在大數陣列轉換成LL的時候取模要用mod/2,如果直接用mod在1e9+8時候出錯。不理解的可以把mod取小點輸出。

程式碼部分

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

#define LL long long

const int mod = 1e9 + 7;

char str[111111];

LL quick_mod(LL k)
{
    LL ans = 1
; LL res = 2; while(k) { if(k&1) ans = (ans*res)%mod; res = (res*res)%mod; k >>= 1; } return ans; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%s",str); int len = strlen(str); LL k = 0; for
(int i = 0;i< len;i++) k = (k*10 + str[i] - '0')%500000003; k = (k -1 + 500000003)%500000003; printf("%lld\n",quick_mod(k)); } return 0; }