canuc80k4704·5/21

Đồng dư tuyến tính

Nộp bài trên LQDOJ

Bài 47 · Extended Euclidean Algorithm

Với từng bộ , hãy giải đồng dư ≡ , hoặc báo vô nghiệm. Một hợp lệ khi chia . Có thể in bất kỳ nghiệm nguyên nào.

Input

  • Dòng đầu chứa .
  • Mỗi trong dòng tiếp theo chứa và .

Output

  • Mỗi truy vấn in một nghiệm hoặc impossible.

Constraints

Scoring

  • Subtask ( số điểm): các test từ đến , dùng miền dữ liệu nhỏ để có thể đối chiếu độc lập.
  • Subtask ( số điểm): không có giới hạn bổ sung ngoài các ràng buộc đã nêu.

Example

Test 1

Input

3
4 2 6
4 3 6
7 5 9

Output

2
impossible
2

Giải thích: Truy vấn đầu có nghiệm ; truy vấn thứ hai vô nghiệm vì không chia ; truy vấn cuối cũng cho nghiệm .

Lời giải tóm tắt
  • Ý tưởng: Đồng dư a·x≡b (mod m) tương đương với phương trình a·x+m·y=b. Gọi g=gcd(a,m). Nghiệm tồn tại khi và chỉ khi g chia b.
  • Ý tưởng: Euclid mở rộng cho một hệ số u thỏa a·u+m·v=g. Sau khi nhân với b/g, ta nhận một nghiệm của đồng dư. Chuẩn hóa nó modulo m/g để có đại diện không âm; nếu không thỏa điều kiện chia hết thì in impossible.
  • Ý tưởng: Mỗi truy vấn chạy trong O(log m); tổng thời gian O(T log M).