Trang chủ Tin Học Lớp 10 Dãy số fibonacci được thành lập bởi công thức: ...

Dãy số fibonacci được thành lập bởi công thức:  f1 = f2 = 1;  fi = fi−1 + fi−2 (i ≥ 3). Yêu cầu: Cho các số nguyên dương N và BASE. Tính fN mod BASE. Input:

Câu hỏi :

Dãy số fibonacci được thành lập bởi công thức:  f1 = f2 = 1;  fi = fi−1 + fi−2 (i ≥ 3). Yêu cầu: Cho các số nguyên dương N và BASE. Tính fN mod BASE. Input: Gồm một dòng duy nhất chứa hai số nguyên dương N và BASE. Output: In ra kết quả bài toán. C++ ạ, mong các pro giúp em vs ạ.

Lời giải 1 :

ảnh: do bấm enter hơi chậm nên nó thành ra gần 1s :)))

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define sqr(x) x*x

ll mod;
 
struct matrix
{
    ll c[2][2];
    matrix()
    {
        c[0][0]=0;
        c[0][1]=1;
        c[1][0]=1;
        c[1][1]=1;
    }
};

void showm(matrix a){
 for (int i = 0;i <= 1;i++)
 {
  for (int j = 0;j <= 1;j++)
   cout << a.c[i][j] << ' ';
  cout << '\n';
 }
}
 
matrix operator* (matrix a, matrix b)
{
 ll base = mod;
    matrix res;
    for (int i = 0;i < 2;i++)
        for (int j = 0;j < 2;j++)
        {
            res.c[i][j] = 0;
            for (int k = 0;k < 2;k++)
                res.c[i][j] = (res.c[i][j] + a.c[i][k]*b.c[k][j]) % base;
        }
    return res;
}
 
matrix pow_matrix (matrix a, ll n)
{
    if (n == 1)
        return a;
    if (n % 2 != 0)
        return a*pow_matrix(a,n-1);
    matrix tmp = pow_matrix(a,n/2);
    return tmp*tmp;
}

void showm(matrix A,ll m){
 for (int i = 0;i < m;i++)
 {
  for (int j = 0;j < m;j++)
   cout << A.c[i][j] << ' ';
  cout << '\n';
 }
}

int main()
{
    ll n,m;
    cin >> n >> mod;
    matrix a;
    a = pow_matrix(a,n);
// showm(a);
 cout << a.c[0][1];
}

image

Thảo luận

-- cx đc bn ạ nhưng sai té 3 test :((
-- ơ cay thế nhỉ :((
-- time thì ok mà wa :((
-- bn sai ở đâu nx ý có lẽ lỗi nhẹ thôi
-- :(((
-- mà bài này có giới hạn n mà
-- Giới hạn:  [25%]: N ≤ 10 6 , BASE ≤ 10 9 ;  [25%]: N ≤ 10 18 , BASE ≤ 10 4 ;  [25%]: N ≤ 10 18 , BASE ≤ 10 9 ;  [25%]: N, BASE ≤ 10 18
-- Giới hạn:  [25%]: N ≤ 10^6, BASE ≤ 10^9;  [25%]: N ≤ 10^18, BASE ≤ 10^4;  [25%]: N ≤ 10^18, BASE ≤ 10^9;  [25%]: N, BASE ≤ 10^18

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 10

Lớp 10 - Năm thứ nhất ở cấp trung học phổ thông, năm đầu tiên nên có nhiều bạn bè mới đến từ những nơi xa hơn vì ngôi trường mới lại mỗi lúc lại xa nhà mình hơn. Được biết bên ngoài kia là một thế giới mới to và nhiều điều thú vị, một trang mới đang chò đợi chúng ta.

Nguồn : ADMIN :))

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK