#include <stdio.h>
long long Fib(int n);
int main()
{
int i;
int nCase;
int n;
scanf("%d", &nCase);
for (i = 0; i < nCase; i++)
{
scanf("%d", &n);
printf("Scenario #%d:\n", i + 1);
if (n == 0)
printf("1\n\n");
else if (n == 1)
printf("2\n\n");
else if (n == 2)
printf("3\n\n");
else
printf("%lld\n\n", Fib(n - 2));
}
return 0;
}
long long Fib(int n)
{
long long a1, a2, a3, a4;
long long f2, f1;
long long b1, b2, b3, b4, t2, t1;
a1 = a2 = a3 = 1; a4 = 0;
f2 = 3; f1 = 2;
while (n)
{
if (n & 1)
{
t2 = a1 * f2 + a2 * f1;
t1 = a3 * f2 + a4 * f1;
f2 = t2;
f1 =t1;
}
b1 = a1 * a1 + a2 * a3;
b2 = a1 * a2 + a2 * a4;
b3 = a3 * a1 + a4 * a3;
b4 = a3 * a2 + a4 * a4;
a1 = b1;
a2 = b2;
a3 = b3;
a4 = b4;
n /= 2;
}
return f2;
}
UVa 10450 - World Cup Noise
最新推荐文章于 2020-04-27 23:54:03 发布