UVA 10518 How Many Calls?

UVA_10518

    这个题目想到f(n)=f(n-1)+f(n-2)+1还是比较容易的,但如果能想到是f(n)=2*F(n)-1就不太容易了,在看了UVA的论坛之后我才知道原来可以表示成这个样子,其中F(n)为斐波那契数,有了这个式子是第一步,后面的计算过程倒还不算麻烦。

    后来在群里讨论的时候,突然发现S(n)=F(n)+F(n+1)-1,S(n)为斐波那契的前n项和,这时又想到我之前推到的一个结论f(n)=S(n)-F(n-1),发现这个和f(n)=2*F(n)-1是可以转化的,限于当时还不知道S(n)的表达式,所以错过了推出结论的机会。

    先说说我推出f(n)=S(n)-F(n)的过程吧,我们在递推计算递归次数的时候,每次的+1都另起一行来写,这样我们会得到下面的这个表。

    f(0)      f(1)      f(2)      f(3)      f(4)      f(5)      f(6)

                                                                1

                                                      1         1

                                            1         1         2

                                  1         1         2         3

                        1         1         2         3         5

    1         1         2         3         5         8         13

    没有数字的地方就可以看做是0,f(i)下面对应的整数和就是f(i)的值,相当于计算f(n)=f(n-1)+f(n-2)+1的时候,每行都进行f(n)=f(n-1)+f(n)的运算,最后再把1另起一行写在上面。

    这样我们就能很明显的看出来,每行都是一个斐波那契数列,不难得到f(n)=S(n)-F(n-1),这样再把S(n)= F(n)+F(n+1)-1代入,就可以得到f(n)=2*F(n)-1。

    不管用什么办法,反正我们现在是得到f(n)的表达式了。下面回到题目,问题就转化成了f(n)%b的值是多少,由于n很大所以我们在计算F(n)的时候不能直接递推计算,于是可以把F(n)写成矩阵的形式,然后用快速幂取模求得F(n)%b的值,进而就会有f(n)%b的值。

#include<stdio.h>
#include<string.h>
#include<math.h>
long long int N, B;
long long int a[100][5], b[5];
void pow_mod(long long int n, int e)
{
if(n == 1)
{
a[e][0] = a[e][1] = a[e][2] = 1;
a[e][3] = 0;
return ;
}
pow_mod(n / 2, e + 1);
a[e][0] = (a[e + 1][0] * a[e + 1][0] + a[e + 1][1] * a[e + 1][2]) % B;
a[e][1] = (a[e + 1][0] * a[e + 1][1] + a[e + 1][1] * a[e + 1][3]) % B;
a[e][2] = (a[e + 1][2] * a[e + 1][0] + a[e + 1][3] * a[e + 1][2]) % B;
a[e][3] = (a[e + 1][2] * a[e + 1][1] + a[e + 1][3] * a[e + 1][3]) % B;
if(n % 2)
{
b[0] = (a[e][0] * a[0][0] + a[e][1] * a[0][2]) % B;
b[1] = (a[e][0] * a[0][1] + a[e][1] * a[0][3]) % B;
b[2] = (a[e][2] * a[0][0] + a[e][3] * a[0][2]) % B;
b[3] = (a[e][2] * a[0][1] + a[e][3] * a[0][3]) % B;
a[e][0] = b[0], a[e][1] = b[1], a[e][2] = b[2], a[e][3] = b[3];
}
}
void solve()
{
a[0][0] = a[0][1] = a[0][2] = 1;
a[0][3] = 0;
if(N == 0)
{
printf("1\n");
return ;
}
pow_mod(N, 1);
printf("%lld\n", (2 * a[1][0] + B - 1) % B);
}
int main()
{
int t = 0;
for(;;)
{
scanf("%lld%lld", &N, &B);
if(!N && !B)
break;
printf("Case %d: %lld %lld ", ++ t, N, B);
solve();
}
return 0;
}


转载于:https://www.cnblogs.com/staginner/archive/2011/12/14/2288187.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang ide 环境搭建_Golang 入门 : 打造开发环境

工欲善其事&#xff0c;必先利其器&#xff01;在学习和使用 Golang 时如果有一款得心应手的 IDE&#xff0c;相信一定可以事半功倍。虽然很多 IDE 都提供了对 Golang 的支持&#xff0c;但真正好用的没几个。VSCode 算是不错的一个&#xff0c;但比起收费的 GoLand 还有些差距…

.NET 6 数组拷贝性能对比

本文来对比多个不同的方法进行数组拷贝&#xff0c;和测试其性能测试性能必须采用基准&#xff08;标准&#xff09;性能测试方法&#xff0c;否则测试结果不可信。在 dotnet 里面&#xff0c;可以采用 BenchmarkDotNet 进行性能测试。详细请看 C# 标准性能测试拷贝某个数组的从…

python win32ui选取文件夹_最全 Python 算法实现资源汇总!

整理 | Rachel责编 | Jane出品 | Python大本营(ID&#xff1a;pythonnews)【导语】数据结构与算法是所有人都要学习的基础课程&#xff0c;自己写算法的过程可以帮助我们更好地理解算法思路&#xff0c;不要轻视每一个算法&#xff0c;一些虽然看似容易&#xff0c;但可能有很多…

Openfiler + Redhat 5.4 Oracle 11gR2 RAC 安装文档

Oracle 11gR2 RAC 的安装。 这个实验采用的架构&#xff1a; 虚拟机VMServer 2.0 REDHAT 5.4 Oracle 11gR2openfiler存储 DNS server (scan)&#xff0c;openfiler通过iscsi 连接到虚拟机上&#xff0c;作为共享设备。 参考Oracle 官方文档&#xff1a; 在 Oracle Enterpris…

兄弟,就你这智商就别出轨了吧?

1 这智商就别出轨了吧&#xff08;没有聪明人就能出轨的意思&#xff09;▼2 “俗话说得好”上一句是什么&#xff1f;▼3 这是什么诡异的老年运动&#xff1f;▼4 搞不懂时尚趋势在哪里.....▼5 聚餐的时候千万别拿着包去厕所▼6 一看就会一学就废▼7 聪明的狗子能有多…

【CSS基础】实现 div 里的内容垂直水平居中

方案一&#xff1a; 所有内容垂直水平居中 兼容性&#xff1a;IE8。 条件&#xff1a;内容宽度和高度可以未知&#xff0c;可以是多行文字、图片、div。 描述&#xff1a;使用table-cell vertical-align &#xff0c; html代码见文末。 .centerDiv {width: 800px;height: 350p…

一些有意思的算法代码[转载]

转载自&#xff1a;http://coolshell.cn/articles/6010.html Keith Schwarz是一个斯坦福大学计算机科学系的讲师。他对编程充满了热情。他的主页上他自己正在实现各种各样的有意思的算法和数据结构&#xff0c;http://www.keithschwarz.com/interesting/&#xff0c; 目前这个网…

python web前端开发面试_面试前端,听听别人怎么说!

分享一个人的面试经验&#xff1a;一年半经验&#xff0c;百度、有赞、阿里面试总结前言人家都说&#xff0c;前端需要每年定期出来面面试&#xff0c;衡量一下自己当前的技术水平以及价值&#xff0c;本人17年7月份&#xff0c;毕业到现在都没出来试过&#xff0c;也没很想换工…

requestmapping注解访问404_【框架】127:几个非常重要的注解

今天是刘小爱自学Java的第127天。感谢你的观看&#xff0c;谢谢你。今天的知识点有点多&#xff0c;有点记不过来了。学习内容安排如下&#xff1a;使用注解优化昨天写的springMVC入门程序。映射路径各种风格的学习&#xff0c;也就对应了注解RequestMapping中的参数。各种类型…

Dapr + .NET Core实战(二) 服务调用

服务调用是什么在分布式应用程序中的服务之间进行调用会涉及到许多挑战。例如&#xff1a;维护其他服务的地址。如何安全地调用服务。在发生短暂的 暂时性错误 时如何处理重试。分布式应用程序调用链路追踪。服务调用构建块通过使用 Dapr 挎斗作为服务的 反向代理 来解决这些难…

华为新员工入职时信息安全保密手册

一、新员工入职信息安全须知 新员工入职后&#xff0c;在信息安全方面有哪些注意事项&#xff1f; 接受“信息安全与保密意识”培训&#xff1b; 每年应至少参加一次信息安全网上考试&#xff1b; 办理员工卡&#xff1b; 签署劳动合同&#xff08;含保密职责&#xff09;&…

第五周项目2-对象作为数据成员

回想Engineer类的数据成员&#xff0c;有眼镜、背包等。某Engineer的眼镜、背包&#xff0c;是Glass、Bag类的对象。类中的数据成员&#xff0c;其类型可以是简单类型&#xff0c;也可以是类。通过这种方式&#xff0c;将某些类组合到另外的类中&#xff0c;当作其中的一个“部…

谷歌排名第一的编程语言,死磕它这两点,小白也能学的会!不信你看!

全世界只有3.14 % 的人关注了爆炸吧知识谷歌排名第一的编程语言时什么&#xff1f;毫无疑问&#xff1a;肯定是 Python。也难怪&#xff0c;作为大数据时代和人工智能时代的必备语言&#xff0c;Python 的优点太多了&#xff0c;语言简洁、易学、开发效率高、可移植性强......另…

android主动显示流程,Activity加载显示基本流程

本文章是基于Android源码6.0讲解Activity加载显示基本流程首先上一张图给大家一个直观的了解首先一个布局页面的加载是在Activity中的setContentView(R.layout.res)开始;我们就从Acitvity源码中的setContentView方法入手public void setContentView(LayoutRes int layoutResID)…

VIM之Project 项目管理工具

VIM是Linux和Unix下常用的文本编辑工具&#xff0c;在编写代码和阅读代码中经常使用。但VIM进行代码项目管理时&#xff0c;没有IDE集成开发工具方便&#xff0c;现在提供一个VIM插件Project&#xff0c;可以对代码项目进行简单的集中管理一、 下载安装1、 在 Vim 网站上下载最…

vue数组刷新_Vue数组更新方法

Vue的核心是数据与视图的双向绑定&#xff0c;当我们修改数组时&#xff0c;Vue会检测到数据变化&#xff0c;所以用v-for渲染的视图也会立即更新。Vue包含了一组观察数组变异的方法&#xff0c;使用他们改变数组也会触发视图更新。push()pop()shift()unshift()splice()sort()r…

python提供什么机制处理程序运行错误_浅谈Python异常处理机制

异常机制己经成为衡量一门编程语言是否成熟的标准之一&#xff0c;使用异常处理机制的 Python 程序有更好的容错性&#xff0c;更加健壮。 对于计算机程序而言&#xff0c;情况就更复杂了一一没有人能保证自己写的程序永远不会出辛苦&#xff01;就算程序没有错误&#xff0c;你…

WPF DataGrid 通过自定义表头模拟首行固定

WPF DataGrid 通过自定义表头模拟首行固定独立观察员 2021 年 9 月 25 日最近工作中要在 WPF 中做个表格&#xff0c;自然首选就是 DataGrid 控件了。问题是&#xff0c;UI 设计的表格是在首行有一个新增按钮&#xff0c;那一行样式和其它数据行是一样的&#xff0c;就在表头下…

python和C语言分别实现插入排序

python语言代码&#xff1a;代码1 defInsertSort(numbers,n):2 fori inrange(1,n):3 j i-14 tem numbers[i]5 whilenumbers[j]>tem andj>0:6 numbers[j1] numbers[j]7 j -18 else:9 numbers[j1] tem10 print"Onthe sort:",numbers11 12 a [9,8,7,6,5,4,3,2,1,0…

Windows用户安全小技巧

本文适用于具有管理员用户和标准用户的所有Windows系统&#xff0c;如Windows 2000以上的操作系统&#xff0c;UAC是Windows Vista以上版本的具有功能。新安装的Windows系统或者新购买的含有Windows系统计算机一开始都需要安装许多软件并需要设置较多的含有Windows安全或用户控…