canuc80k0800·1/50

Bước Tới Bội Số

Nộp bài trên LQDOJ

Bài 0.9 · Arithmetic

Có bộ dữ liệu độc lập. Trong mỗi bộ, bạn nhận hai số nguyên dương và . Một thao tác cho phép tăng thêm đúng .

Hãy xác định số thao tác ít nhất để giá trị cuối cùng của chia hết cho . Nếu đã chia hết cho , đáp án bằng .

Input

  • Dòng đầu chứa số nguyên - số bộ dữ liệu.
  • Mỗi dòng trong dòng tiếp theo chứa hai số nguyên và .

Output

  • Với mỗi bộ dữ liệu, in trên một dòng số thao tác nhỏ nhất cần thực hiện.

Constraints

  • .
  • trong mỗi bộ dữ liệu.
  • Mỗi bộ dữ liệu được xử lý độc lập.

Scoring

  • Subtask ( số điểm): và .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

4
8 4
8 5
1 9
999999999 1000000000

Output

0
2
8
1

Giải thích: Số đã là bội của , còn với cặp ta tăng hai lần để đạt . Hai cặp còn lại lần lượt cần tăng tới và , nên kết quả tương ứng là và .

Lời giải tóm tắt
  • Phân tích: Đặt r = a mod b. Khi r = 0, giá trị ban đầu đã thỏa mãn. Nếu r > 0, bội tiếp theo của b nằm cách a đúng b-r đơn vị.
  • Thuật toán: Với từng bộ dữ liệu, tính phần dư r. In 0 nếu r=0; ngược lại in b-r.
  • Chứng minh đúng: Nếu r=0, dùng 0 thao tác là tối ưu. Nếu r>0, tăng b-r lần đưa a tới bội kế tiếp của b; mọi số lần tăng nhỏ hơn vẫn để phần dư trong đoạn [r,b-1], nên chưa thể chia hết. Vì vậy thuật toán luôn cho số thao tác nhỏ nhất.
  • Độ phức tạp: Mỗi bộ dữ liệu cần O(1) thời gian và O(1) bộ nhớ phụ.