用c语言使用分治法和矩阵乘法求斐波那契数列,要求输入一个n可以查询到斐波那契数列对应的数值
时间: 2024-04-23 10:04:21 浏览: 77
矩阵乘法求斐波纳契数列
5星 · 资源好评率100%
以下是使用分治法和矩阵乘法求解斐波那契数列的 C 语言代码:
```c
#include <stdio.h>
void multiply(int F[2][2], int M[2][2]);
void power(int F[2][2], int n);
int fib(int n);
// 矩阵乘法函数
void multiply(int F[2][2], int M[2][2])
{
int x = F[0][0] * M[0][0] + F[0][1] * M[1][0];
int y = F[0][0] * M[0][1] + F[0][1] * M[1][1];
int z = F[1][0] * M[0][0] + F[1][1] * M[1][0];
int w = F[1][0] * M[0][1] + F[1][1] * M[1][1];
F[0][0] = x;
F[0][1] = y;
F[1][0] = z;
F[1][1] = w;
}
// 矩阵快速幂函数
void power(int F[2][2], int n)
{
if (n <= 1) {
return;
}
int M[2][2] = {{1, 1}, {1, 0}};
power(F, n/2);
multiply(F, F);
if (n % 2 != 0) {
multiply(F, M);
}
}
// 斐波那契数列函数
int fib(int n)
{
if (n == 0) {
return 0;
}
int F[2][2] = {{1, 1}, {1, 0}};
power(F, n-1);
return F[0][0];
}
// 主函数
int main()
{
int n;
printf("请输入n:");
scanf("%d", &n);
printf("斐波那契数列的第%d项为:%d\n", n, fib(n));
return 0;
}
```
该程序使用了分治法和矩阵乘法的思想,通过计算斐波那契数列第 n 项的值来实现程序的功能。
阅读全文