首页 > 代码库 > 数论大整理(不定时更新)(虽然是懵着听下来的)x

数论大整理(不定时更新)(虽然是懵着听下来的)x

一、斐波那契数列:

技术分享
 1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 int main() 5 { 6     double a,n,ans; 7     cin>>n; 8     //n--;  //(第一项是0时) 9     a=sqrt(5);10     ans =(a/5) * (pow( (1+a)/2 ,n) - pow((1-a)/2 ,n));11     cout<<ans; 12     return 0; 13 }
通项公式
技术分享
 1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 using namespace std; 5 int a[10001]; 6 int main() 7 { 8     int n; 9     a[1]=1;10     a[2]=1;11     scanf("%d",&n);12     for(int i=3;i<=n;i++)13     {14         a[i]=a[i-1]+a[i-2];15     }16     cout<<a[n];17     return 0;18 }
递推算法
技术分享
 1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 using namespace std; 5 int a[10001]; 6 int f(int n) 7 { 8     if(n==1||n==2)return 1; 9     else return f(n-1)+f(n-2);10 }11 int main()12 {13     int n;14     a[1]=1;15     a[2]=1;16     scanf("%d",&n);17     printf("%d",f(n));18     return 0;19 }
递归算法

二、素数:

详细请见http://www.cnblogs.com/zxqxwnngztxx/p/6735297.html

在这里仅仅给出线性筛法求素数的代码:

技术分享
 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5  6 using namespace std; 7  8 const int MAXN=10001; 9 10 int vis[MAXN];11 12 int main()13 {14     int n;15     scanf("%d",&n);16     for(int i=2;i<=sqrt(n);i++)17     {18         if(vis[i]==0)19         {20             for(int j=i*i;j<=n;j=j+i)21             {22                 vis[j]=1;23             }24         }25     }26     for(int i=2;i<=n;i++)27     {28         if(vis[i]==0)29         printf("%d ",i);30     }31     return 0;32 }
线性筛法求素数

 三、(扩展)欧几里得算法(裴蜀定理):

详细请见:http://www.cnblogs.com/zxqxwnngztxx/p/6741002.html

codevs有道题(同余方程)可以去做做试试:http://codevs.cn/problem/1200/

技术分享
 1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5     int n,m,r; 6     cin>>m>>n; 7     r=m%n; 8     while(r!=0) 9     {10         m=n;11         n=r;12         r=m%n;13     }14     cout<<n;15 }
欧几里得算法
技术分享
 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4  5 using namespace std; 6  7 long long exgcd(long long a,long long b,long long &x,long long &y) 8 { 9     if(b==0)10     {11         x=1;12         y=0;13         return a;14     }15     long long r=exgcd(b,a%b,x,y),t=x;16     x=y;y=t-y*(a/b);17     return r; 18 }19 20 int main()21 {22     long long a1,b1,x1,y1;23     cin>>a1>>b1;24     exgcd(a1,b1,x1,y1);25     while(x1<0) x1+=b1;26     cout<<x1;27     return 0;28 } 
扩展欧几里得算法

 

数论大整理(不定时更新)(虽然是懵着听下来的)x