Trang chủ Tin Học Lớp 8 Cho phương trình `ax+by=c`, với `a, b, c` là các...

Cho phương trình `ax+by=c`, với `a, b, c` là các số nguyên dương `<= 10^9`, tìm số cặp nghiệm nguyên dương thỏa mãn đề Y/c chay trong 1s (Ko TLE) VD: INPUT: 2

Câu hỏi :

Cho phương trình `ax+by=c`, với `a, b, c` là các số nguyên dương `

Lời giải 1 :

// carot15
/* 
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long


ll a,b,z;
bool check(ll n){
 if ( z-n*b >= a ) return true;
 else return false;
}


ll chat(){
 ll d = 0,c = z,ans = 0;
 while(d <= c){
  ll mid = (c+d) / 2;
  if (check( mid )){
   d = mid+1;
   ans = max(ans, mid);
  } else c = mid-1;
 }
 return ans;
}


int main()
{
 cin>>a>>b>>z;


 ll z1=__gcd(a, b), m=0;
 z1=__gcd(z1, z);
 a /= z1; b /= z1; z /= z1;
 if (b < a) swap(a, b);


 z1 = chat();
 while(( z-z1*b ) % a != 0) z1--;
 if ( z1 <= 0 ) cout << 0;
 else cout<<( z1-1 )/a + 1;
}

Thảo luận

-- ko t học ở VNOi =)
-- thấy 1 cái acc tmath :v
-- =) à t ở tmath cũng có acc
-- =) ở đâu t cũng có hết
-- Qá gê ghớm và đây chính là carot15 :)))) AC 100% luôn
-- haha
-- bài này dùng cách làm chia bước nhảy cũng đc
-- https://hoidap247.com/cau-hoi/4055098 helpp

Lời giải 2 :

#include <algorithm>
#include <iostream>
#include <vector>
#include <cmath>

#define int long long
#define gcd __gcd
#define pii pair<int, int>
#define X first
#define Y second
using namespace std;

int a, b, c;

pii operator * (pii a, int x) {
    return make_pair(a.X * x, a.Y * x);
}

pii operator - (pii a, pii b) {
    return make_pair(a.X - b.X, a.Y - b.Y);
}

// ax + by = c -> x? y?
pii Extended_gcd(int a, int b, int c) {
    if (c % gcd(a, b) != 0) return {0, 0};
    
    int tmp = c / gcd(a, b);
    
    pii x = {1, 0};
    pii y = {0, 1};
    while (b != 0) {
        int q = a / b, r = a % b; a = b, b = r;
        pii xr = x - y * q;
        x = y;
        y = xr;
    }
    
    return x * tmp;
}

int32_t main() {
    int a, b, c;
    cin >> a >> b >> c;
    int t = gcd(a, gcd(b, c));
    a /= t, b /= t, c /= t;
    
    pii s = Extended_gcd(a, b, c);
    if (s.X * a + s.Y * b != c) return cout << 0, 0;
    
    // x = X + b*t > 0 <=> t > -X / b
    // y = Y - a*t > 0 <=> t < Y / a
    // (t ∈ Z)
    
    int l = -s.X / b + (s.X % b == 0);
    int r = s.Y / a - (s.Y % a == 0);
    
    cout << (r - l + 1);
}

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ự 8

Lớp 8 - Năm thứ ba ở cấp trung học cơ sở, học tập bắt đầu nặng dần, sang năm lại là năm cuối cấp áp lực lớn dần nhưng các em vẫn phải chú ý sức khỏe nhé!

Nguồn : ADMIN :))

Copyright © 2021 HOCTAP247