一、快速幂:快速幂是一种求n的m次方的一种很省时的方法,利用二进制的思想,但需要注意的是,在求解的过程中,需要不断取模,因为这个数可能连long long都存不下。一般求解题都会让取模。而且有一个取模公式需要说一下:(a * b) % c = (a%c * b%c) % c. (时间复杂度(o(logn)))
例题:
1、给出一个整数N,输出N^N(N的N次方)的十进制表示的末位数字。
Input
一个数N(1 <= N <= 10^9)
Output
输出N^N的末位数字
Sample Input
13
Sample Output
3
#include<stdio.h>//求末位数字就是幂对10取模
typedef long long ll;
ll pow_mod(ll a,ll b,int mod)//快速幂就是利用二进制快速求一个数的几次幂
{
ll r = 1;
while(b)
{
if(b&1) r*=a%mod;//b&1是取b的最后一位
a=a*a%mod;
b>>=1;
}
return r%10;
}
int main()
{
ll n;
scanf("%lld",&n);
printf("%lld\n",pow_mod(n,n,10));
}
2、求n的m次方对c取余
#include<stdio.h>
typedef long long ll;
ll pow_mod(ll a,ll b,ll c)//快速幂就是利用二进制快速求一个数的几次幂
{
ll r = 1;
while(b)
{
if(b&1) r *= a % c;//b&1是取b的最后一位
a = a*a % c;
b >>= 1;
}
return r % c;
}
int main()
{
ll a,b;
scanf("%lld %lld",&a,&b);
printf("%lld",pow_mod(a,b));
}