#include <stdio.h>
#include <math.h>
int main ()
{int a,i=1,n,T;
scanf("%d",&T);
n=T;
int q[T+1];
while(T--)
{scanf("%d",&a);
q[i++]=(long)((1/sqrt(5))*((pow(((1+sqrt(5))/2),a+2)-pow(((1-sqrt(5))/2),a+2))-1))%1000000007;
}
for(i=1;i<=n;i++)
printf("%d\n",q[i]);}
运行结果:
此题我算出Sn了,可是在取模这里一直有问题。。。求解计算过程中怎么防止溢出
大家讲道理2017-04-17 13:33:03
用遞推算,不要用通項公式。
m = 1000000007
S(n)=(F(1)+F(2)+...+F(n)) % m
=(F(1)%m + F(2)%m + ... + F(n)%m) % m
F(n) = F(n-2) + F(n-1)
F(n)%m = (F(n-2) + F(n-1)) % m
= (F(n-2)%m + F(n-1)%m) % m