- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
#include<stdio.h>
#include<math.h>
int main()
{
long long a1,a2,a3,a4,t,p,l,m1,m,d1,d2,d3,d4,c1,c2,c3,c4,n,r;
double po;
m=1000000006;
scanf("%lld",&t);
while(t--)
{scanf("%lld",&n);
a1=1;a2=1;a3=1;a4=0;
d1=1;d2=0;d3=0;d4=1;
p=n-2;
while(p>0)
{ if(p%2!=0)
{ c1=((d1*a1)%m+(d3*a3)%m);
c2=((d1*a2)%m+(d2*a4)%m);
c3=((d3*a1)%m+(d4*a3)%m);
c4=((d3*a2)%m+(d4*a4)%m);
d1=c1;d2=c2;d3=c3;d4=c4;
}
c1=((a1*a1)%m+(a2*a3)%m);
c2=((a1*a2)%m+(a2*a4)%m);
c3=((a3*a1)%m+(a4*a3)%m);
c4=((a3*a2)%m+(a4*a4)%m);
a1=c1;a2=c2;a3=c3;a4=c4;
p=p/2;
}
l=((d1*1)%m+(d2*1)%m)%m;m1=((d3*1)%m+(d4*1)%m)%m;
po=pow(2,l);
r=llrintl(po)%(m+1);
printf("%lld\n",r);
}
return 0;
}
LispGovno 26.11.2012 10:04 # 0
bormand 26.11.2012 10:19 # +4
Fai 26.11.2012 11:59 # −2
bormand 26.11.2012 10:20 # +2
> r=llrintl(po)%(m+1)
> long long int llrint(double x);
> long long int llrintf(float x);
> long long int llrintl(long double x);
Не айс.
LispGovno 26.11.2012 10:40 # 0
bormand 26.11.2012 10:44 # +2
bormand 26.11.2012 11:04 # 0
P.S. Строчки с pow и llrintl портят всю картину...
Fai 26.11.2012 12:01 # −3
bormand 26.11.2012 12:51 # +1
Fai 26.11.2012 13:01 # −2
bormand 26.11.2012 15:27 # 0
Как-то так. Нагуглить саму задачку не удалось.
Fai 26.11.2012 15:57 # +2
LispGovno 26.11.2012 18:05 # −4
Сорри за толстоту троллинга. Жир начал стекать с моей клавиатуры.
Fai 26.11.2012 18:40 # 0
А вообще надеюсь bormand все почистит.
bormand 26.11.2012 18:55 # 0
Не надейся ;)
bormand 26.11.2012 18:12 # 0
P.S. Если запуллить репу к себе - все ок.
> file 3 lines (2 sloc) 4.241 kb
Гитхаб не может в хаскель.
Fai 26.11.2012 18:42 # 0
Неужели githab не может в