[Buổi 5][Số học modulo & lũy thừa nhanh][HW] Bài 4: Khóa nghịch đảo modulo


LÀM BÀI

Points: 100
Time limit: 2.0s
Memory limit: 128M

Author:
Problem types

Khóa nghịch đảo modulo

Bối cảnh và bài toán

Một hệ thống mã hóa tuyến tính dùng phép nhân modulo m. Để giải mã hệ số a, hệ thống cần tìm số x sao cho a*x ≡ 1 (mod m). Không phải mọi cặp (a,m) đều có một khóa nghịch đảo như vậy.

Bạn cần xử lý nhiều yêu cầu và trả về nghịch đảo chuẩn nhỏ nhất không âm khi nó tồn tại.

Yêu cầu

Với mỗi cặp (a,m), in nghịch đảo modulo của a theo m, tức số x duy nhất trong 0 <= x < m thỏa a*x ≡ 1 (mod m). Nếu không tồn tại, in -1.

Input

  • Dòng 1: số nguyên q.
  • q dòng tiếp theo: mỗi dòng chứa a m.

Output

Với mỗi truy vấn, in nghịch đảo modulo chuẩn hóa hoặc -1 nếu không tồn tại.

Ràng buộc

  • 1 <= q <= 10^5
  • 1 <= a < m <= 10^9

Chấm điểm

Subtask Điểm Điều kiện Official tests
S1 20% q ≤ 50, m ≤ 10^4 01–04
S2 30% q ≤ 5000, m ≤ 10^9 05–10
S3 50% Không có ràng buộc bổ sung 11–20

Ví dụ 1

Input

4
3 7
2 4
10 17
12 18

Output

5
-1
12
-1

Giải thích. 3*5=15 ≡1 (mod 7). Với 2,4 và 12,18, GCD lớn hơn 1 nên không có nghịch đảo.

Ví dụ 2

Input

2
1 9999
35 64

Output

1
11

Giải thích. 35*11=385 ≡1 (mod 64).

Thông tin bài tập

Thuộc tính Giá trị
Mã bài DSA-M02-B05-HW04
Buổi B05
Loại bài HOMEWORK
Mức độ khó Trung bình (Medium)
Thời gian làm bài khuyến nghị 30 phút
Time limit 2 giây
Memory limit 128 MB
Tổng điểm 100
Chuẩn ngôn ngữ tham chiếu C++17

Nguồn: FULLHOUSE DEV – Self-generated.


Comments

There are no comments at the moment.

Zalo