PHép mod 3 Biết rằng (a b)%c = ((a%c)(b%c))%c, ví dụ: (103)%4 = 2 và (((10%4)(3%4)))%4 = 6%4 = 2; trong khi đó giới hạn biểu diễn của long long là cỡ 18 chữ số, hãy tính (ab)%c khi mà tích (ab) có thể vượt quá khả năng biểu diễn của long long trong C++. Trong bài này, số c có thể lên đến 1018, đây là một điều khá tệ vì sau khi % xong, ta nhân lại vẫn có thể tràn số. Để khắc phục điều này, bạn hãy tìm hiểu về phép nhân Ấn độ, hoặc bạn liên hệ Mr Toàn để có một trick khá hay cho phép toán này nhé! Yêu cầu Tính (a * b)%c Dữ liệu Dòng 1 chứa 2 số nguyên dương a và b (a,b≤1018); Dòng 2 ghi số nguyên dương c (c≤1018). Kết quả In ra kết quả của (a * b)%c. INPUT Copy 473533207341277217 661950249426733688 47834567961336203 OUTPUT Copy 20568985178261806 CODE C++ nha Giúp toy với

2 câu trả lời

#mình gửi code nhá bạn

#include <bits/stdc++.h>
using namespace std;
long long nhan(long long a, long long b, long long c)
{
    if (b == 0)
        return 0;

    long long T = nhan(a, b / 2, c) % c;

    if (b & 1)
        return ((T + T) % c + a % c) % c;
    else
        return (T + T) % c;
}

int main()
{
    long long a, b, c;
    cin >> a >> b >> c;

    cout << nhan(a, b, c);
}

#nếu có sai sót thì cmt cho mình nhá 

#nhớ vote mình 5 sao , tym , hay nhất nhá để mình cho thể lên hạng ạ 

#phạm tùng dương

#include <bits/stdc++.h>
using namespace std;
long long a,b,c,s;
int main()
{
    cin>>a>>b>>c;
    s=((a%c)*(b%c))%c;
    cout<<s;
    return 0;
}