日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

斐波那契数列的3种求法及几种素数筛法

發布時間:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 斐波那契数列的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种求法及几种素数筛法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。