用矩阵求斐波那契数列,快速幂log(n),只用求最后4位(加和乘的运算中前面的位数无用)

 #include <stdio.h>
#include <stdlib.h> int main()
{
/*
(x y)(x y)= (x*x+y*s x*y+y*t) =(x*x+y*s y*(x+t))
(s t)(s t) (s*x+t*s s*y+t*t) (s*(x+t) t*t+y*s)
(x y)(a b)= (x*a+y*c x*b+y*d)
(s t)(c d) (s*a+t*c s*b+t*d)
(a b)(f1=1)=(a+b)
(c d)(f2=1) (c+d)
*/
//(a,b)(c,d)一开始为E2
long n,x,y,s,t,xx,yy,ss,tt,a,b,c,d,aa,bb,cc,dd;
while (scanf("%ld",&n))
{
if (n==)
{
printf("0\n");
continue;
}
else if (n==-)
break;
n-=;
x=;
y=;
s=;
t=;
a=;
b=;
c=;
d=;
while (n)
{
if (n%==)
{
aa=a;
bb=b;
cc=c;
dd=d;
a=(x*aa+y*cc)%;
b=(x*bb+y*dd)%;
c=(s*aa+t*cc)%;
d=(s*bb+t*dd)%;
}
xx=x;
yy=y;
ss=s;
tt=t;
x=(xx*xx+yy*ss)%;
y=(yy*(xx+tt))%;
s=(ss*(xx+tt))%;
t=(tt*tt+yy*ss)%;
n=n/;
}
printf("%ld\n",(c+d)%);
} return ;
}
 #include <stdio.h>
#include <stdlib.h> int main()
{
/*
(x y)(x y)= (x*x+y*s x*y+y*t) =(x*x+y*s y*(x+t))
(s t)(s t) (s*x+t*s s*y+t*t) (s*(x+t) t*t+y*s)
(x y)(a b)= (x*a+y*c x*b+y*d)
(s t)(c d) (s*a+t*c s*b+t*d)
(a b)(f1=1)=(a+b)
(c d)(f2=1) (c+d)
*/
//(a,b)(c,d)一开始为E2
long n,x[],y[],s[],t[],a[],b[],c[],d[],w,r,i;
x[]=;
y[]=;
s[]=;
t[]=;
a[]=;
b[]=;
c[]=;
d[]=;
for (i=;i<;i++)
{
x[i]=(x[i-]*x[i-]+y[i-]*s[i-])%;
y[i]=(y[i-]*(x[i-]+t[i-]))%;
s[i]=(s[i-]*(x[i-]+t[i-]))%;
t[i]=(t[i-]*t[i-]+y[i-]*s[i-])%;
}
while (scanf("%ld",&n))
{
if (n==)
{
printf("0\n");
continue;
}
else if (n==-)
break;
n-=;
w=;
r=;
while (n)
{
if (n%==)
{
a[r+]=(x[w]*a[r]+y[w]*c[r])%;
b[r+]=(x[w]*b[r]+y[w]*d[r])%;
c[r+]=(s[w]*a[r]+t[w]*c[r])%;
d[r+]=(s[w]*b[r]+t[w]*d[r])%;
r++;
}
w++;
n=n/;
}
printf("%ld\n",(c[r]+d[r])%);
}
return ;
}

poj3070_斐波那契数列(Fibonacci)的更多相关文章

  1. python实现斐波那契数列(Fibonacci sequence)

    使用Python实现斐波那契数列(Fibonacci sequence) 斐波那契数列形如 1,1,2,3,5,8,13,等等.也就是说,下一个值是序列中前两个值之和.写一个函数,给定N,返回第N个斐 ...

  2. 斐波那契数列(Fibonacci) iOS

    斐波那契数列Fibonacci 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2 ...

  3. 使用一位数组解决 1 1 2 3 5 8 13 数列问题 斐波纳契数列 Fibonacci

    斐波纳契数列 Fibonacci 输出这个数列的前20个数是什么? 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 使用数组实现输出数列的前30 ...

  4. 使用并行的方法计算斐波那契数列 (Fibonacci)

    更新:我的同事Terry告诉我有一种矩阵运算的方式计算斐波那契数列,更适于并行.他还提供了利用TBB的parallel_reduce模板计算斐波那契数列的代码(在TBB示例代码的基础上修改得来,比原始 ...

  5. 练习六:斐波那契数列(fibonacci)

    题目:斐波那契数列. 程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.……. 在数学上,斐波那契数列 ...

  6. Java实现斐波那契数列Fibonacci

    import java.util.Scanner; public class Fibonacci { public static void main(String[] args) { // TODO ...

  7. k阶斐波那契数列fibonacci第n项求值

    已知K阶斐波那契数列定义为:f0 = 0,  f1 = 0, … , fk-2 = 0, fk-1 = 1;fn = fn-1 + fn-2 + … + fn-k , n = k , k + 1, … ...

  8. 斐波那契数列Fibonacci问题—动态规划

    斐波那契数列定义 Fibonacci array:1,1,2,3,5,8,13,21,34,... 在数学上,斐波那契数列是以递归的方法来定义: F(0) = 0 F(1) = 1 F(n) = F( ...

  9. 9 斐波那契数列Fibonacci

    题目1:写一个函数,输入n,求Fibonacci数列的第n项.该数列定义如下: n=0时,f(n)=0; n=1时,f(n)=1; n>1时,f(n)=f(n-1)+f(n-2) 1. 效率差的 ...

随机推荐

  1. v-for v-if || v-else

    <el-col> <div v-for="item in resultDetail" class="physical-content" v-i ...

  2. M2阶段测试报告

    一.安全漏洞测试报告: http://files.cnblogs.com/hotsbuaa/M2-安全漏洞测试.pdf 二.全面兼容测试: http://files.cnblogs.com/hotsb ...

  3. vs2013——单元测试&& 性能图

    一.如何创建单元测试 下面这个博客中写的很详细: http://***/Article/11186 其中需要注意的是,首先新建工程项目,在此目录下Add单元测试项目,还需要在单元测试项目中引用被测试的 ...

  4. 《Linux内核分析》第八周学习总结

    <Linux内核分析>第八周学习总结                                      ——进程的切换和系统的一般执行过程 姓名:王玮怡  学号:20135116 ...

  5. MySQL主从复制配置遇到的部分问题

    网上配置教程很多,我也是参考其他人的教程完成的,主要遇到了以下几个问题,如果以后有人遇到相同的希望能够给大家写提示吧. 1.my.cnf文件配置 Master上的my.cnf中配置的server_id ...

  6. 小学生四则运算App实验成果

    组名:会飞的小鸟 组员:徐侃 陈志棚  罗伟业 刘芮熔 —成员分工: —①刘芮熔:设置安卓包.界面的代码,界面的排序. —②陈志棚:加减乘除的判断异常处理,例如除数不能为零的异常处理等问题. —③徐侃 ...

  7. DrangonBorns

    团队介绍 团队名称:DrangonBorns(龙裔)      团队博客:http://www.cnblogs.com/DragonBorns/     团队队长:蒲建国     队长博客链接:htt ...

  8. oracle 18c centos7 设置开机自动启动Oracle

    学习自: http://blog.csdn.net/condywl/article/details/57129696 1. 在root用户下进行修改 配置文件 /etc/oratab vim /etc ...

  9. C++与C的区别

    在最开始C++只是C加上了一些面向对象的特性,C++最初的名字为C with Classes.后来C++又提出了一些不同于Class的特性:Exceptions(异常).templates(模板).S ...

  10. FuelPHP 系列(六) ------ CURD 增删改查

    一.create $article = new Model_Article(); // 或 $article = Model_Article::forge(); // 保存数据,返回新增数据 id $ ...