码迷,mamicode.com
首页 > 其他好文 > 详细

sum 大数取余+快速幂

时间:2018-04-09 00:24:04      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:acm   style   otto   enter   limit   contest   script   problem   ring   

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
 

 

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 大数取余+快速幂

标签:acm   style   otto   enter   limit   contest   script   problem   ring   

原文地址:https://www.cnblogs.com/yzm10/p/8748094.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!