斐波那契数列(NOIP1997)

来源:互联网 发布:朴素贝叶斯算法matlab 编辑:程序博客网 时间:2024/06/06 03:18

题目链接:斐波那契数列
这题是数论的一个基本应用,还是很水,因为数据范围太水了,只有48,这也太小了。不过也有可能是当时的电脑速度跑得比较慢的原因。但是这个算法应该还是这个算法。主要思路就是递推求斐波那契数列第n项(还有其他方法,但此处够了),然后对它进行因数分解,就可以了,下面给代码:

#include<bits/stdc++.h>using namespace std;void primes(int n){    printf("%d=",n);    int q=sqrt(n+0.5);            for(int i=2;i<=q;i++){        if(n%i==0){            while(n%i==0){                printf("%d",i);                n/=i;                if(n!=1){                    printf("*");         //1                }            }        }    }    if(n>1){        printf("%d",n);                   //5    }}int main(){    int n;    scanf("%d",&n);    int f[n];    f[0]=1;                             //2    f[1]=1;    for(int i=2;i<n;i++){        f[i]=(f[i-1]+f[i-2])%2147483648;//3    }    primes(f[n-1]);                //4    return 0;}

1处:要判断n是否等于1,如果等于1,代表分解结束,不再输出*
2处:赋初值
3处:递推公式计算,注意取模。
4处:注意计算时候是n-1,因为我们第一项下标为0
5处:如果分解完成后,n还是大于1,说明n是素数,直接输出n