首页 > 其他 > 详细

sum 大数取余+快速幂

时间:2018-04-08 23:08:50      阅读:208      评论:0      收藏:0      [点我收藏+]

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!