5 条题解

  • 0
    @ 2025-8-20 15:45:36

    来个矩阵快速幂(虽然通常是需要取模的时候再用😋o(logn))

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    typedef vector<vector<ll>> mat;
    
    mat operator*(const mat &a, const mat &b) {
        mat c(2, vector<ll>(2));
        for (int i = 0; i < 2; ++i) {
            for (int j = 0; j < 2; ++j) {
                for (int k = 0; k < 2; ++k) {
                    c[i][j] += a[i][k] * b[k][j];
                }
            }
        }
        return c;
    }
    
    
    mat operator^(mat a, ll b) {
        mat res = {{1, 0}, {0, 1}};
        while (b) {
            if (b & 1) res = res * a;
            a = a * a;
            b >>= 1;
        }
        return res;
    }
    
    
    
    void solve() {
        ll n;
        cin >> n;
        if (n == 1) {
            cout << 1 << '\n';
            return;
        }
        mat trans = {{1, 1}, {1, 0}};
        mat power = trans ^ (n - 2);
        mat init = {{1, 0}, {1, 0}};
        mat res = power * init;
        cout << res[0][0] << '\n';
    }
    
    
    
    int main() {
        int t;
        cin >> t;
        while (t--) {
            solve();
        }
        return 0;
    }
    
    • 0
      @ 2025-6-28 9:22:24

      用递归做是最简单的

      #include <bits/stdc++.h>
      using namespace std;
      int dg(int n)
      {
          if(n==1||n==2)
          {
              return 1;//如果是1/2,直接return1
          }
          else
          {
              return dg(n-1)+dg(n-2);//否则继续递归
          }
      }
      int main()
      {
          ios::sync_with_stdio(false);
          cin.tie(0);cout.tie(0);
          int n,m;
          cin>>n;
          for(int i=1;i<=n;i++)
          {
              cin>>m;
              cout<<dg(m)<<'\n';
          }
          return 0;
      }
      
      • 0
        @ 2023-10-12 18:52:22
        #include<iostream>
        using namespace std;
        int a(int n){
        	int a1=1,a2=1,a3;
            for(int i=0;i<n-2;i++){
            a3=a1+a2;
            a1=a2;
            a2=a3;}
            return a3;
        }
        int main(){
            int m;
            cin>>m;
            int n;
            for(int i=0;i<m;i++){
                cin>>n;
                if(n==1||n==2){
                	cout<<"1"<<endl;
        		}
                else{
        		n=a(n);
                cout<<n<<endl;}
            }
        }
        
        • 0
          @ 2023-9-24 14:09:41

          #include<stdio.h> int main() {int m,n,i,s1,s2; scanf("%d",&m); while(m--) {scanf("%d",&n); for(i=3,s1=s2=1; i<=n;i++) {s1=s1+s2; s2=s1-s2; } printf("%d\n",s1); } return 0; }

          • 0
            @ 2023-9-16 23:39:15
            #include<stdio.h>
            int main()
            {
                int m;
                scanf("%d",&m);
                int a[25]={0};
                a[1]=1;
                a[2]=1;
                int n;    
                for(int i=3;i<25;i++){
                        a[i]=a[i-1]+a[i-2];
                }
                for(int j=1;j<=m;j++){
                    scanf("%d",&n);
                    printf("%d\n",a[n]);
                }
                return 0;
            }
            
            • 1

            信息

            ID
            123
            时间
            3000ms
            内存
            128MiB
            难度
            4
            标签
            (无)
            递交数
            1017
            已通过
            443
            上传者