题解
- 学会了打表找规律的技巧
- 2 2 3 4 7 12 23 44 87 172 343 684 1367 2732 5463
- 奇数项2 3 7 23 87 343 1367 5463
- 偶数项2 4 12 44 172 684 2732
- 奇数项的差为1 4 16 64 216 1024 4096
- 偶数项的差为2 8 32 128 512 2048
- 奇数项的通项公式:
- a2 - a1 = 1 = 4^0
- a3 - a2 = 4 = 4^1
- a4 - a3 = 16 = 4^2
- a5 - a4 = 64 = 4^3
- ……
- an - an-1 = 4^(n-2)
- 所以an - a1 = (4^(n-1)-1)/3, a1 = 2
- an = (4^(n-1)+5)/3
- 偶数项的通项公式:
- an = (2*4^(n-1)+4)/3
- 最后直接套公式,最后要取模。取模公式(a/b)%p = [a%(b*p)]/b
代码
#include <bits/stdc++.h>
using namespace std;
int const MOD = 10007;
typedef long long ll;
ll n;
ll power(ll a,ll n,ll mod){
ll ans = 1;
while(n){
if(n&1) ans = ans * a % mod;
a = a * a % mod;
n >>= 1;
}
return ans;
}
int main(){
int T,caser = 0;
scanf("%d",&T);
while(T--){
scanf("%lld",&n);
printf("Case #%d: ",++caser);
if(n&1){
n = (n + 1) / 2;
printf("%lld\n",(power(4,n-1,3*MOD) + 5) % (3*MOD) / 3); //(4^(n-1)+5)/3 % MOD
}
else{
n /= 2;
printf("%lld\n",(2 * power(4,n-1,3*MOD) + 4) % (3*MOD) / 3); //(2*4^(n-1)+4)/3 % MOD
}
}
return 0;
}