Description
TomCat有一个环(如图)有N个单元,并且有4中颜色。他希望把环的每一个单元格都染上颜色,但是相邻的两个单元格颜色不能相同。他想知道一共有几种染色方法
Input
输入单元格数N,N<=100000。
Output
输出染色总数对1000000007取余的结果。
Sample Input
1
2
Sample Output
4
12
注释:根据题意推出染色方法为(m-1)^n+(-1)^n*(m-1) (m>=2&&n>=2),再用快速幂。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod=1000000007;
ll quickpower(ll k,ll b){
ll res=1;
while(b){
if(b%2==1)res=res*k%mod;
k=k*k%mod;
b/=2;
}
return res;
}//快速幂模板(k^b%mod)
int main(){
int n;
while(~scanf("%d",&n)){
if(n==1){
printf("4\n");
}
else {
ll w=quickpower(3,n)%mod;
if(n%2==1){
printf("%lld\n",w-3);
}
else printf("%lld\n",w+3);
}
}
return 0;
}