P2626 斐波那契数列(升级版)(合数的质数分解, 大数为素数的概率十分小的利用)
题目背景#
大家都知道,斐波那契数列是满足如下性质的一个数列:
- f(1)=1f(1) = 1 f(1)=1
- f(2)=1f(2) = 1f(2)=1
- f(n)=f(n−1)+f(n−2)f(n) = f(n-1) + f(n-2)f(n)=f(n−1)+f(n−2) (n≥2n ≥ 2n≥2 且 nnn 为整数)。
题目描述#
请你求出第nnn个斐波那契数列的数mod(或%)2312^{31}231之后的值。并把它分解质因数。
输入输出格式#
输入格式:
n
输出格式:
把第nnn个斐波那契数列的数分解质因数。
输入输出样例#
说明#
n≤48n \le 48n≤48
思路:本来用了矩阵快速幂(没看n的范围以为很大)但是死活不过因为n=48和n=47时,斐波拉契数列的值不对,但是n>48的值
都是对的,所以我就改用了比较直接的方法。
但是本题主要是用了合数分解为质数乘积的模板和利用大数是素数的概率很小的技巧。
#include<iostream> #define ll long long #define mod 2147483648 using namespace std; int main() { ll num[50]; num[1] = num[2] = 1; for (int i = 3; i < 50; ++i) num[i] = (num[i - 1] + num[i - 2]) % mod; int n; cin >> n; ll kk = num[n]; ll num1[200], cnt = 0; for (ll i = 2; kk != 1; ++i) { while (kk%i == 0) { num1[cnt++] = i; kk /= i; } if (i > 1000)break; } if (kk != 1)num1[cnt++] = kk; cout << num[n] << "="; for (int i = 0; i < cnt; ++i) { cout << num1[i] << "*\n"[i == cnt - 1]; } }
作者:ALINGMAOMAO
出处:https://www.cnblogs.com/ALINGMAOMAO/p/9581469.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探