【POJ 3070 Fibonacci】+ 矩阵快速幂

本文介绍了一种计算斐波那契数列第n项最后四位数字的有效方法,使用了矩阵快速幂算法来提高计算效率。

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

Fibonacci
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 13752 Accepted: 9742

Description

In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, the first ten terms of the Fibonacci sequence are:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …

An alternative formula for the Fibonacci sequence is

.这里写图片描述

Given an integer n, your goal is to compute the last 4 digits of Fn.

Input

The input test file will contain multiple test cases. Each test case consists of a single line containing n (where 0 ≤ n ≤ 1,000,000,000). The end-of-file is denoted by a single line containing the number −1.

Output

For each test case, print the last four digits of Fn. If the last four digits of Fn are all zeros, print ‘0’; otherwise, omit any leading zeros (i.e., print Fn mod 10000).

Sample Input

0
9
999999999
1000000000
-1

Sample Output

0
34
626
6875

Hint

As a reminder, matrix multiplication is associative, and the product of two 2 × 2 matrices is given by

.

Also, note that raising any 2 × 2 matrix to the 0th power gives the identity matrix:

.这里写图片描述

矩阵都给来了~~~直接算~~矩阵还是很好用的~~一个快速计算卡特兰序列的方法~~

AC代码 :

#include<cstdio>
#include<algorithm>
using namespace std;
const int mod = 10000;
struct node{
   int m[2][2];
}dw,ans;
node jz(node a,node b){ // 矩阵构造
   node sum;
   for(int i = 0 ; i < 2 ; i++)
     for(int j = 0 ; j < 2 ; j++){
       sum.m[i][j] = 0;
       for(int k = 0 ; k < 2 ; k++)
        sum.m[i][j] = (sum.m[i][j] + a.m[i][k] * b.m[k][j]) % mod;
   }
   return sum;
}
int solve(int n){ // 矩阵快速幂
   dw.m[0][0] = dw.m[1][1] = 1;
   dw.m[0][1] = dw.m[1][0] = ans.m[1][1] = 0;
   ans.m[0][0] = ans.m[0][1] = ans.m[1][0] = 1;
   while(n){
    if(n & 1)
        dw = jz(dw,ans);
    ans = jz(ans,ans);
    n >>= 1;
   }
   return dw.m[0][1];
}
int main()
{
    int N;
    while(scanf("%d",&N) != EOF && N != - 1){
        printf("%d\n",solve(N));
    }
    return 0;
}
内容概要:本文档详细介绍了基于MATLAB实现多目标差分进化(MODE)算法进行无人机三维路径规划的项目实例。项目旨在提升无人机在复杂三维环境中路径规划的精度、实时性、多目标协调处理能力、障碍物避让能力和路径平滑性。通过引入多目标差分进化算法,项目解决了传统路径规划算法在动态环境和多目标优化中的不足,实现了路径长度、飞行安全距离、能耗等多个目标的协调优化。文档涵盖了环境建模、路径编码、多目标优化策略、障碍物检测与避让、路径平滑处理等关键技术模块,并提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,对无人机路径规划和多目标优化算法感兴趣的科研人员、工程师和研究生。 使用场景及目标:①适用于无人机在军事侦察、环境监测、灾害救援、物流运输、城市管理等领域的三维路径规划;②通过多目标差分进化算法,优化路径长度、飞行安全距离、能耗等多目标,提升无人机任务执行效率和安全性;③解决动态环境变化、实时路径调整和复杂障碍物避让等问题。 其他说明:项目采用模块化设计,便于集成不同的优化目标和动态环境因素,支持后续算法升级与功能扩展。通过系统实现和仿真实验验证,项目不仅提升了理论研究的实用价值,还为无人机智能自主飞行提供了技术基础。文档提供了详细的代码示例,有助于读者深入理解和实践该项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值