canuc80k4706·7/21

Đường đến ngai vàng

Nộp bài trên LQDOJ

Bài 47 · Extended Euclidean Algorithm

Trên vòng tròn vị trí, từ và mỗi bước tiến , hãy tìm số bước nhỏ nhất để tới vị trí . Sau bước, vị trí là () mod ; cũng được xét.

Input

  • Dòng đầu chứa ; mỗi dòng sau chứa .

Output

  • Mỗi test in số bước nhỏ nhất hoặc .

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
10 4 3
6 1 4
7 0 3

Output

2
-1
0

Giải thích: Hai truy vấn đầu lần lượt cần bước và vô nghiệm; ở truy vấn cuối người chơi đã đứng tại vị trí nên đáp án là .

Lời giải tóm tắt
  • Ý tưởng: Cần tìm t≥0 nhỏ nhất sao cho S+t·K≡0 (mod N), tức K·t≡-S (mod N). Gọi g=gcd(K,N). Nếu g không chia S, đồng dư vô nghiệm và đáp án là -1.
  • Ý tưởng: Nếu có nghiệm, chia cả phương trình cho g. Euclid mở rộng tìm nghịch đảo của K/g modulo N/g; nhân với -S/g rồi chuẩn hóa về [0,N/g-1] sẽ cho t nhỏ nhất không âm.
  • Ý tưởng: Độ phức tạp mỗi test là O(log N).