1. 程式人生 > >sum 大數取余+快速冪

sum 大數取余+快速冪

i++ AI ace har main accept rain pre fine

Sum

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 3980 Accepted Submission(s): 1620


Problem Description
技術分享圖片

Sample Input 2

Sample Output 2 Hint 1. For N = 2, S(1) = S(2) = 1. 2. The input file consists of multiple test cases.

Source 2013 Multi-University Training Contest 10

Recommend zhuyuanchen520 一道學長教的數論題。找出規律後發現求的是2^(n-1)。由於n非常大,所以在輸入的時候可以分位取余(((a*100%MOD)+b*10%NOD)+c%MOD)%MOD,最後跑一邊快速冪。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string
> #include<math.h> #include<queue> #include<stack> #include<map> #include<set> #include<vector> #include<algorithm> #define MAX 1000005 #define INF 0x3f3f3f3f #define MOD 1000000007 using namespace std; typedef long long ll; ll qMod(ll a,ll b){ ll ans
=1; while(b>0){ if(b&1) ans=ans*a%MOD; b>>=1; a=a*a%MOD; } return ans; } int main() { int n,len,i; char s[MAX]; while(~scanf(" %s",s)){ ll c=0; len=strlen(s); for(i=0;i<len;i++){ int x=s[i]-0; c=c*10+x; if(c>1000000006) c%=1000000006; } c=((c-1)%1000000006+1000000006)%1000000006; printf("%lld\n",qMod(2,c)); } return 0; }

sum 大數取余+快速冪