HDU 2855 Fibonacci Check-up(数…
2012-12-05 17:15
316 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855
这题找规律比较难
代码:
#include<stdio.h>
int
m;
__int64
a[2][2],b[2][2];
void
Mul(__int64 c[2][2],__int64 d[2][2])
{
__int64 x[2][2],y[2][2];
x[0][0]=c[0][0];x[0][1]=c[0][1];
x[1][0]=c[1][0];x[1][1]=c[1][1];
y[0][0]=d[0][0];y[0][1]=d[0][1];
y[1][0]=d[1][0];y[1][1]=d[1][1];
c[0][0]=(x[0][0]*y[0][0]+x[0][1]*y[1][0])%m;
c[0][1]=(x[0][0]*y[0][1]+x[0][1]*y[1][1])%m;
c[1][0]=(x[1][0]*y[0][0]+x[1][1]*y[1][0])%m;
c[1][1]=(x[1][0]*y[0][1]+x[1][1]*y[1][1])%m;
}
void
POW(int n)
{
if(n==1)
return;
POW(n/2);
Mul(a,a);
if(n%2==1)
Mul(a,b);
a[0][0]%=m;a[0][1]%=m;
a[1][0]%=m;a[1][1]%=m;
}
int
main()
{
int ncase,n;
scanf("%d",&ncase);
while(ncase--)
{
scanf("%d%d",&n,&m);
if(n==0)
printf("0\n");
else if(n==1)
printf("%d\n",1%m);
else
{
a[0][0]=b[0][0]=3;a[0][1]=b[0][1]=1;
a[1][0]=b[1][0]=-1;a[1][1]=b[1][1]=0;
POW(n-1);
printf("%I64d\n",a[0][0]<0?a[0][0]+m:a[0][0]%m);
}
}
return 0;
}
这题找规律比较难
代码:
#include<stdio.h>
int
m;
__int64
a[2][2],b[2][2];
void
Mul(__int64 c[2][2],__int64 d[2][2])
{
__int64 x[2][2],y[2][2];
x[0][0]=c[0][0];x[0][1]=c[0][1];
x[1][0]=c[1][0];x[1][1]=c[1][1];
y[0][0]=d[0][0];y[0][1]=d[0][1];
y[1][0]=d[1][0];y[1][1]=d[1][1];
c[0][0]=(x[0][0]*y[0][0]+x[0][1]*y[1][0])%m;
c[0][1]=(x[0][0]*y[0][1]+x[0][1]*y[1][1])%m;
c[1][0]=(x[1][0]*y[0][0]+x[1][1]*y[1][0])%m;
c[1][1]=(x[1][0]*y[0][1]+x[1][1]*y[1][1])%m;
}
void
POW(int n)
{
if(n==1)
return;
POW(n/2);
Mul(a,a);
if(n%2==1)
Mul(a,b);
a[0][0]%=m;a[0][1]%=m;
a[1][0]%=m;a[1][1]%=m;
}
int
main()
{
int ncase,n;
scanf("%d",&ncase);
while(ncase--)
{
scanf("%d%d",&n,&m);
if(n==0)
printf("0\n");
else if(n==1)
printf("%d\n",1%m);
else
{
a[0][0]=b[0][0]=3;a[0][1]=b[0][1]=1;
a[1][0]=b[1][0]=-1;a[1][1]=b[1][1]=0;
POW(n-1);
printf("%I64d\n",a[0][0]<0?a[0][0]+m:a[0][0]%m);
}
}
return 0;
}
相关文章推荐
- HDU 1708 Fibonacci String
- hdu&nbsp;1848&nbsp;Fibonacci&amp;nbs…
- HDU:1250 Hat's Fibonacci 这样…
- hdu 1021 Fibonacci Again
- HDU:3117 Fibonacci Numbers
- (HDU)1213 How Many Tables
- Check&nbsp;a&nbsp;loop&nbsp;in&nbsp;a&nbsp;list&nbsp;with&nbsp;line…
- hdu 1806 Frequent values 线段…
- hdu 1023,catalan,卡特兰数
- HDU 1232 畅通工程
- hdu 2433 最短路树
- HDU 3065 病毒侵袭持续中(AC自动…
- HDU 2568 前进
- HDU 2093 考试排名
- HDU 1248 寒冰王座
- 杭电1171--Big Event in HDU(多重…
- hdu 1692 Destroy the Well of Lif…
- 最短路径问题 hdu 3790
- hdu 1097 A hard puzzle
- hdu 邂逅明下(Bash博弈的变形)