斐波那契数列的3种求法及几种素数筛法
生活随笔
收集整理的這篇文章主要介紹了
斐波那契数列的3种求法及几种素数筛法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
遞推法
#include<stdio.h> long long sum[40];//也可以不用開數組 int main() {int n;scanf("%d",&n);sum[1]=1;sum[2]=1;for(int t=3;t<=n;t++){sum[t]=sum[t-1]+sum[t-2];}printf("%lld",sum[n]);return 0; }遞歸法
#include<stdio.h> long long F(int x) {if(x==1||x==2){return 1;}else{return F(x-1)+F(x-2);} } int main() {int n;scanf("%d",&n);printf("%lld",F(n));return 0; }矩陣快速冪法
#include<stdio.h> #include<string.h> #define MOD 1000000007 struct Mat {long long a[5][5]; }; Mat res,ans; Mat Mul(Mat x,Mat y) {Mat s;memset(s.a,0,sizeof(s.a));for(int t=0;t<2;t++){for(int j=0;j<2;j++){for(int k=0;k<2;k++){s.a[t][j]+=x.a[t][k]*y.a[k][j];s.a[t][j]%=MOD;}}}return s; } void init() {for(int t=0;t<2;t++){for(int j=0;j<2;j++){if(t==j){ans.a[t][j]=1;}else{ans.a[t][j]=0;}}} } void Quick_pow(long long n) {init();while(n){if(n&1){ans=Mul(ans,res);}res=Mul(res,res);n>>=1;} }int main() {long long n;while(scanf("%lld",&n)!=EOF){res.a[0][0]=1;res.a[0][1]=1;res.a[1][0]=1;res.a[1][1]=0;Quick_pow(n-1);printf("%lld\n",ans.a[0][0]);}return 0; }素數篩法
埃氏篩法:
#include<stdio.h> #include<string.h> #define maxn 100005 bool vis[maxn]; int Prime[maxn]; void Prime_E(int x){for(int t=2;t<=x;t++){if(vis[t]==true){for(int j=2*t;j<=x;j+=t){vis[j]=false;}}} } int main() {int n;scanf("%d",&n);memset(vis,true,sizeof(vis));Prime_E(n);for(int t=2;t<=n;t++){if(vis[t]==true){printf("%d ",t);}}return 0; }歐拉篩法
#include<stdio.h> #include<string.h> #define maxn 100005 bool vis[maxn]; int prime[maxn]; void oula() {int cnt=0;memset(prime,0,sizeof(prime));memset(vis,false,sizeof(vis));for(int t=2; t<maxn; t++) {if(!vis[t])prime[cnt++]=t;for(int j=0; j<cnt&&t*prime[j]<maxn; j++) {vis[t*prime[j]]=true;if(t%prime[j]==0)break;}} } int main() {int n;scanf("%d",&n);oula();for(int t=2;t<=n;t++){if(vis[t]==false){printf("%d ",t);}}return 0; }
?
?
?
?
?
轉載于:https://www.cnblogs.com/Staceyacm/p/10781783.html
總結
以上是生活随笔為你收集整理的斐波那契数列的3种求法及几种素数筛法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pycharm中安装可以贴图片的Mark
- 下一篇: 安装Ubuntu 18.04后的一些操作