HDU3524:数论规律题+快速幂

HDU3524

题解

  • 学会了打表找规律的技巧
  • 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;
}

 

猜你喜欢

转载自blog.csdn.net/weixin_42264485/article/details/88595858