
【nowcoder 214267】广义肥波
广义斐波那契数列的递推计算:定义f₁=1,f₂=1,fₙ= afₙ₋₁ + bfₙ₋₂ (n≥3)。我们需要计算fₙ的值,并且在每一步计算中都对1e9+7取模,以防止数值过大。 快速幂算法:为了计算m的fₙ次方对1e9+7取模的结果,我们使用快速幂算法,这样即使fₙ很大,也不会导致计算时间过长。 快速幂函数: 主函数:读取输入参数,初始化变量,处理特殊情况(n=1或n=2),然后通过循环计算广义斐波那契数列的值。在每一步计算中都对结果取模,以防止数值溢出。 递推计算:从i=3开始,循环计算fₙ的值,并在每一步都对结果取模。 快速幂计算:使用
发布日期:2021-05-07 06:59:20
浏览次数:21
分类:精选文章
本文共 1369 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要计算广义斐波那契数列的第n项,然后计算m的该项次方对1e9+7取模的结果。我们可以通过递推的方法计算广义斐波那契数列的值,并使用快速幂算法来处理大数计算。
方法思路
解决代码
#include#include #include #include using namespace std;ll ksm(ll x, ll y, ll mod) { ll res = 1; while (y > 0) { if (y & 1) { res = (res * x) % mod; } x = (x * x) % mod; y >>= 1; } return res;}int main() { ll a, b, m, n; scanf("%lld %lld %lld %d", &a, &b, &m, &n); ll mod = 1000000007; if (n == 1 || n == 2) { ll f_n = 1; cout << ksm(m, f_n, mod) << endl; return 0; } ll f_prev_prev = 1; // f₁ ll f_prev = 1; // f₂ ll current_f = 0; for (int i = 3; i <= n; ++i) { current_f = (a * f_prev + b * f_prev_prev) % mod; f_prev_prev = f_prev; f_prev = current_f; } ll f_n = f_prev; cout << ksm(m, f_n, mod) << endl; return 0;}
代码解释
ksm
函数用于计算x的y次方对mod取模的结果。它通过重复平方和取模来高效地处理大数运算。ksm
函数计算m的fₙ次方对1e9+7取模的结果,并输出结果。这个方法确保了我们能够高效地处理大数计算,并且在每一步都保持数值的合理范围,从而避免了溢出和性能问题。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月14日 05时30分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
2019-03-06
Problem A - Sequence with Digits (数学推导)
2019-03-06
Problem 330A - Cakeminator (思维)
2019-03-06
LeetCode75 颜色分类 (三路快排C++实现与应用)
2019-03-06
C语言+easyX图形库的推箱子实现
2019-03-06
调试vs2019代码的流程
2019-03-06
脱壳与加壳-加壳-6-代码实现加密导入表
2019-03-06
Typora配置PicGo时,提示Failed to fetch
2019-03-06
ASP.NET CORE MVC 实现减号分隔(Kebab case)样式的 URL
2019-03-06
bcolz的新操作
2019-03-06
zmq的send
2019-03-06
阿里钉钉面试题
2019-03-06
C++中找资源或者函数的方法
2019-03-06
delete对象时会自动调用类的析构函数
2019-03-06
POD类型
2019-03-06
const与常量,傻傻分不清楚~
2019-03-06
Head First设计模式——迭代器模式
2019-03-06
MongoDB版本及存储引擎区别
2019-03-06
shell echo单行和多行文字定向写入到文件中
2019-03-06
HTML5新特性
2019-03-06