1. 程式人生 > >求N的N次方(快速冪取模)

求N的N次方(快速冪取模)

分治演算法的設計思想是,將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。

例題:給定一個整數N(N<=1 000 000 000),求N的N次方的最後一個數字。

首先,暴力的時間複雜度為O(N),對於較大的N顯然太慢。所以我們選取快速冪取模 的方法,基於公式:

(a×b)%=((a%c)×(b%c))%c。

#include<iostream>
using namespace std;
long long mod(long long a,long long b)
{
	if(b==1)
		return a;
	long long s=mod(a,b/2)%10;
	if(b%2==0)
		return (s*s)%10;
	else
		return (s*s*a)%10;
}
int main()
{
	int n;
	cin>>n;
	cout<<mod(n,n)<<endl;
	return 0;
}