1. 程式人生 > >2017 多校訓練第三場 HDU 6063 RXD and math

2017 多校訓練第三場 HDU 6063 RXD and math

打表找規律然後發現是n的k次冪

然後快速冪,實現的時候有一些地方會溢位,可以快速乘或者先進行取模運算

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;

ll mul_mod(ll a,ll b){
	ll ans=0;
	while(b){
		if(b&1){
			ans=(ans+a)%mod;
		}
		a=(a+a)%mod;
		b>>=1;
	}
	return ans;
}

ll power_mod(ll a,ll b){
	ll ans=1;
	while(b){
		if(b&1){
			ans=(mul_mod(ans,a))%mod;
		}
		a=(mul_mod(a,a))%mod;
		b>>=1;
	}
	return ans;
}

ll qpow(ll a,ll b){
	ll ans=1;
	a%=mod;
	while(b){
		if(b&1) ans=(ans*a)%mod;
		a=(a*a)%mod;
		b>>=1;
	}
	return ans;
}

int main(int argc, char const *argv[])
{
	ll a,b;
	int cas=1;
	while(~scanf("%lld %lld",&a,&b)){
		ll ans=qpow(a,b);
		printf("Case #%d: %lld\n",cas++,ans);
	}	
	return 0;
}