Tính (a^b) % 1337 với a là một số nguyên dương và b là một số nguyên dương cực kỳ lớn được cho dưới dạng mảng số nguyên

Viết hàm int superPow (int a, int b[], int len) để tính hàm mũ theo công thức trên.
Hàm nhận giá trị đầu vào là sô nguyên dương a và số nguyên dương b có độ dài len được biểu diễn dưới dạng dãy các số nguyên.
Hàm trả về kết quả là một số nguyên.
cho em xin hướng giải với ạ

Hướng đầu tiên là bỏ chuyện số lớn qua một bên, bạn hãy viết hàm tính (a^b) % 1337 với ab là số nguyên nhỏ trong khoảng (1, 4000000000) rồi share code lên đây thử xem.

3 Likes
int superPow (int a, int b[], int len)
{
    int c=0,d;
    for(int i=0;i<len;i++)
    {
        c+=b[i]*pow(10,len-1-i);
    }
    d=pow(a,c);
    return d%1337;
}

Đây ạ, nhưng do input lớn quá nên n k chạy đc ạ

Một là: code kia không phải cho 2 số nguyên nhỏ như đã đề cập
Hai là: nếu cho a % 1337 = 2, b % 1337 = 5 thì bạn có biết được (a*b) % 1337 bằng bao nhiêu không? Nếu a%1337=7, b%1337=5 thì sao?

Hint

https://en.wikipedia.org/wiki/Modular_arithmetic

3 Likes

à không. ý em a^b là a mũ b ấy ạ

bạn focus vào câu hỏi của Shanley
nếu biết trước x % 1337 = 2, y % 1337 = 5 thì (x * y) %1337 sẽ có kết quả là bao nhiêu
(viết lại để tránh trùng tên a, b)
đây là kiến thức toán học

6 Likes

bạn nên xem lại thái độ học của bạn, có vẻ như bạn không cần kiến thức, chỉ cần hoàn thành bài tập, và ở đây thì không hỗ trợ hoàn thành bài tập

3 Likes

k ạ. tại e k hiểu ý lắm thôi. T.T

Bạn tìm hiểu về định lý Euler (tổng quát hoá của định lý Fermat bé) nhé.

3 Likes

vâng, em hiểu rồi, em cảm ơn ạ
trc tại em k biết định lí này nên em k có hướng làm ạ

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?