C-Recursive Sequence【矩阵快速幂·暑假训练赛4】

本文介绍了一种递归数列问题,农民John和他的奶牛们玩数学游戏,涉及递归序列的计算。文章提供了问题描述,输入输出样例,并深入探讨了矩阵快速幂的解决方案,包括关键步骤和常见错误,以及正确的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

Farmer John likes to play mathematics games with his N cows. Recently, they are attracted by recursive sequences. In each turn, the cows would stand in a line, while John writes two positive numbers a and b on a blackboard. And then, the cows would say their identity number one by one. The first cow says the first number a and the second says the second number b. After that, the i-th cow says the sum of twice the (i − 2)-th number, the (i − 1)-th number, and i^4. Now, you need to write a program to calculate the number of the N-th cow in order to check if John’s cows can make it right.

Input

The first line of input contains an integer t, the number of test cases. t test cases follow.
Each case contains only one line with three numbers N, a and b where N, a, b < 2^31 as described above.

Output

For each test case, output the number of the N-th cow. This number might be very large, so you need to output it modulo 2147493647.

Hint In the first case, the third number is 85 = 2 ∗ 1 + 2 + 3^4.
In the second case, the third number is 93 = 2 ∗ 1 + 1 ∗ 10 + 3^4 and the fourth number is 369 =2 ∗ 10 + 93 + 4^4.

Sample Input

2
3 1 2
4 1 10

Sample Output

85
369

Code

关于矩阵快速幂的讲解,附上网页链接:https://www.cnblogs.com/cmmdc/p/6936196.html

矩阵快速幂的精髓,概括起来应该是两点:
一、模板;
二、找出联系n与n-1的关系矩阵

本题正解–https://blog.youkuaiyun.com/westbrook1998/article/details/82291445

本人两个回合的错误经历↓

//round 1
//Runtime Error, 栈溢出
#include <iostream>
using namespace std;
typedef long long ll;
ll a,b;

ll f(int n){
    if(n==1) return a;
    if(n==2) return b;
    ll ans;
    ans=2*f(n-2)+f(n-1)+n*n*n*n;
    return ans;
}

int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n>>a>>b;
        cout<<(f(n)%2147493647)<<endl;
    }
    return 0;
}
//round 2
//Time Limit Exceeded
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;

int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        ll a,b;
        cin>>n>>a>>b;
        if(n==1){
            cout<<(a%2147493647)<<endl;
            continue;
        }
        if(n==2){
            cout<<(b%2147493647)<<endl;
            continue;
        }
        ll n1=a,n2=b,ans;
        int m=3;
        while(true){
            ans=2*n1+n2+pow(m,4);
            if(m==n){
                cout<<(ans%2147493647)<<endl;
                break;
            }
            n1=n2;
            n2=ans;
            m++;
        }
    }
    return 0;
}
内容概要:本文针对国内加密货币市场预测研究较少的现状,采用BP神经网络构建了CCi30指数预测模型。研究选取2018年3月1日至2019年3月26日共391天的数据作为样本,通过“试凑法”确定最优隐结点数目,建立三层BP神经网络模型对CCi30指数收盘价进行预测。论文详细介绍了数据预处理、模型构建、训练及评估过程,包括数据归一化、特征工程、模型架构设计(如输入层、隐藏层、输出层)、模型编译与训练、模型评估(如RMSE、MAE计算)以及结果可视化。研究表明,该模型在短期内能较准确地预测指数变化趋势。此外,文章还讨论了隐层节点数的优化方法及其对预测性能的影响,并提出了若干改进建议,如引入更多技术指标、优化模型架构、尝试其他时序模型等。 适合人群:对加密货币市场预测感兴趣的研究人员、投资者及具备一定编程基础的数据分析师。 使用场景及目标:①为加密货币市场投资者提供一种新的预测工具和方法;②帮助研究人员理解BP神经网络在时间序列预测中的应用;③为后续研究提供改进方向,如数据增强、模型优化、特征工程等。 其他说明:尽管该模型在短期内表现出良好的预测性能,但仍存在一定局限性,如样本量较小、未考虑外部因素影响等。因此,在实际应用中需谨慎对待模型预测结果,并结合其他分析工具共同决策。
### 使用 `--recursive` 参数的方法及作用 #### 1. **Git 中的 `--recursive` 参数** `--recursive` 是 Git 提供的一个重要参数,主要用于处理子模块(submodules)。当一个仓库依赖于其他独立的 Git 仓库时,这些外部仓库被称为子模块。为了确保主仓库与其子模块同步更新并正常工作,`--recursive` 参数发挥了重要作用。 - 如果在克隆仓库时使用了 `git clone --recursive <repository-url>` 命令,则会递归地初始化并克隆所有的子模块[^4]。 - 若未使用该参数而仅运行普通的 `git clone`,则只会下载主仓库的内容,而不包含其子模块中的文件。这可能导致后续操作失败,因为缺少必要的资源[^3]。 #### 2. **具体应用场景** 对于某些复杂的开源项目来说,它们可能由多个相互关联的小型库组成。例如 DORIS 数据库系统就需要先完成基础环境搭建后再引入额外组件支持功能扩展;此时如果忽略掉 `--recursive` 配置项就很容易遇到错误提示像 "fatal: No such ref..." 这样的情况发生[^2]。 因此,在实际开发过程中应当养成良好习惯即始终记得加上这个标志位来保障整个工程结构完整无缺: ```bash $ git clone --recursive https://example.com/repo.git ``` 另外值得注意的是,即使已经完成了初始阶段的操作之后再次面对新增加或者修改过的子模块定义表单也需要重新执行相应指令才能生效: ```bash $ git submodule update --init --recursive ``` 此命令能够帮助开发者及时获取最新版次级存储单元内的变动信息以便继续推进下一步骤的工作流程[^5]。 --- ### 示例代码展示 以下是关于如何正确运用 `--recursive` 参数的具体实例演示: 假设存在这样一个名为 MyProject 的大型软件工程项目,并且它内部集成了几个第三方插件作为辅助工具包形式存在的话,那么我们可以按照下面的方式来进行完整的复制过程: ```bash # 正确方式:一次性完全拷贝包括所有子模块在内的全部内容 $ git clone --recursive https://github.com/user/MyProject.git # 错误示范(不推荐): 只能获得顶层目录下的东西而已 $ git clone https://github.com/user/MyProject.git ``` 假如后来得知官方维护者又向其中添加了一些新特性对应的附加模块怎么办呢?没关系,只需简单补充一句就能轻松搞定啦! ```bash # 更新现有的子模块至最新的状态 $ cd MyProject/ $ git pull origin main $ git submodule update --init --recursive ``` 以上步骤可以保证无论何时何地都能保持与上游源一致的状态! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值