计蒜客 31716 - ACM-ICPC 2018 焦作赛区网络预赛 - G. Give Candies - 指数降幂

题目链接:https://nanti.jisuanke.com/t/31716

题意:队友读的题,题意可以转化为输入N,1≤N≤10^100000,求2^(N-1);

解析:套用指数降幂的模板即可,算法原理可以自行百度欧拉降幂公式。

具体可以参考:https://blog.csdn.net/acdreamers/article/details/8236942

                         https://blog.csdn.net/sdau20163942/article/details/83384083

代码

#include 
using namespace std;
const int N=1000005;
typedef long long LL;
const LL MOD=1e9+7;

char str[N];


LL euler_phi(LL n) //较快
{
    LL ans=n;
    for(LL i=2;i*i<=n;i++)
    if(n%i==0)
    {
        ans-=ans/i;
        while(n%i==0)
            n/=i;
    }
    if(n>1)
        ans-=ans/n;;
    return  ans;
}

LL multi(LL a,LL b)
{
    LL ans = 0;
    a %= MOD;
    while(b)
    {
        if(b & 1)
        {
            ans = (ans + a) % MOD;
            b--;
        }
        b >>= 1;
        a = (a + a) % MOD;
    }
    return ans;
}

LL pow_mod(LL n,LL k) //快速幂求n^k余m的结果
{
    LL res=1;
    n=n%MOD;
    while(k>0)
    {
        if(k&1)
            res=res*n%MOD;
        n=n*n%MOD;
        k>>=1;
    }
    return res;
}


void Solve(LL a,char str[],LL c)
{
    LL len = strlen(str);
    LL ans = 0;
    LL p = euler_phi(c);
    if(len <= 15)
    {
        for(int i=0; i

开始做题时是一冲动写的JAVA大数的快速幂,代码是超时的,这里记录一下:

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
	
	static BigInteger pow_mod(BigInteger n,BigInteger k,BigInteger m) //快速幂求(n^p)%m的值
	{
		BigInteger res=BigInteger.ONE;
		BigInteger tw=BigInteger.valueOf(2);
	    while(!k.equals(BigInteger.ZERO))
	    {
	    	if(k.mod(tw).equals(BigInteger.ONE))
	    		res=res.multiply(n).mod(m);
	        n=n.multiply(n).mod(m);
	        k=k.divide(tw);
	    }
	    return res;
	}
	public static void main(String[] args) {
		Scanner cin=new Scanner(System.in);

		int T;
		T=cin.nextInt();
		BigInteger MOD=BigInteger.valueOf(1000000007);
		while(T--!=0)
		{
			BigInteger n=cin.nextBigInteger();
			n=n.subtract(BigInteger.ONE);
			System.out.println(pow_mod(BigInteger.valueOf(2),n,MOD));
		}
		cin.close();
	}
}

 

 

你可能感兴趣的:(组合数学,指数降幂,欧拉降幂,快速幂)