题解 P2626 【斐波那契数列(升级版)】

这一道题目的解法多种多样,但就对于题目本身而言拿暴力分应该不是太难,简单地模拟一下斐波拉契的过程,求出第n个,最后分解质因数也不难暴力出奇迹。对于代码的实现我只花了几分钟,一次就AC ^_^

#include<bits/stdc++.h> 
#define max 2147483648 //2^31次方的值,拿计算器算的
using namespace std;  
int main()  
{  
    int n;
    cin>>n;
    if(n==1||n==2){//对于前两个1,1时可以直接输出
        cout<<1;
        return 0; //结束
    }
    int a=1,b=1,c;
    for(int i=1;i<=n-2;i++)//斐波拉契数列的模拟
    {
        c=a+b;//第三项
        a=b;//每一个往前移动
        b=c;
    }
    cout<<c%max<<"=";//输出第n个%2^31
    int x=c%max;//将c%max存入x
    for(int i=2;i<=x;i++)//每次都暴力枚举2~n
    {
        if(c%i==0){
            cout<<i;
            c=c/i;//更新c的值,对c进行分解
            i=1;//这里之所以会写i=1是因为在循环结束后会i++,所以就相当与从i=2~n了
            if(c==1)break;//当分解完毕后即可退出
            else cout<<"*";//如果不是最后一个还要输出"*"
        }
    }
}  

这题的两个难点就是1.求斐波那契数列第n,2.对n%2^31分解质因数。注意:2^31最好用long long来存,对于数据范围来看,这个范围实在是太小了,随随便便的暴力就可以过了,这里只是提供一个简单的思路,方便大家对这道题有更好的理解。理解万岁!

转载于:https://www.cnblogs.com/Douglas-Zhou/p/P2626.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值