Biến Đổi Số
Xem dạng PDFCho hai số nguyên dương ~n~ và ~m~. Bạn được phép thực hiện thao tác sau (không hoặc nhiều lần):
- Chọn một số ~x~ ~(1 \le x \le m)~ bất kỳ, sau đó gán ~n \leftarrow n \times \gcd(n,x)~. Trong đó ~\gcd(n, x)~ là ước chung lớn nhất của ~n~ và ~x~.
Người dân trên hành tinh Arrakis luôn truyền tai nhau về lời tiên tri, nếu ai tìm được cách biến đổi số ~n~ thành ~m~ bằng cách thực hiện ít thao tác nhất, người đó sẽ trở thành vị cứu tinh của vương quốc, The Messiah. Người thực hiện thử thách này phải đưa ra được một dãy thao tác biến đổi số ~n~ bất kỳ thỏa mãn, hoặc phải chỉ ra rằng không tồn tại cách để biến đổi ~n~ thành ~m~ với thao tác đã cho.
Arrakis đang lâm nguy, thánh chiến sắp nổ ra, hãy thử giải quyết thử thách xem liệu bạn có phải là người được chọn!
Input
Mỗi test gồm nhiều test case. Dòng đầu tiên chứa số lượng test case ~t~ (~1 \le t \le 100~).
Mỗi test case gồm một dòng duy nhất chứa hai số nguyên dương ~n, m~ (~1 \leq n, m \leq 10^9~).
Output
Với mỗi test case, nếu như không tồn tại cách biến đổi số ~n~ thành ~m~ sử dụng thao tác đã cho, in ra ~-1~. Ngược lại, in ra trên một dòng số nguyên ~k~ (~1 \le k \le 200~) — số bước ít nhất để biến đổi ~n~ thành ~m~, theo sau đó là ~k~ số nguyên ~x_1, x_2, \ldots, x_k~ — các số nguyên được chọn cho từng bước theo thứ tự.
Nếu có nhiều dãy thao tác có số bước ít nhất để biến đổi ~n~ thành ~m~, hãy in ra dãy thao tác bất kỳ.
Có thể chỉ ra rằng nếu có thể biến đổi từ ~n~ thành ~m~, sẽ tồn tại dãy biến đổi có không quá ~200~ thao tác.
Scoring
Tổng điểm cho bài này là ~1250~.
Sample Input 1
5
2 2
1 6
6 216
2 12
4 2
Sample Output 1
0
-1
2 6 6
-1
-1
Notes
Ở test case đầu tiên, ~n = m = 2~, do đó không thực hiện thêm thao tác nào.
Ở test case thứ hai, ~n = 1~. Ta chỉ có thể chọn được ~x = 1~, và sau đó gán ~n \gets \gcd(1, 1) = 1~. Thao tác không thể thay đổi ~n~, do đó không tồn tại dãy thao tác hợp lệ.
Ở test case thứ 3, ~n = 6~, ~m = 216~. Trùng hợp thay, ~216 = 6^3~, ta có thể lựa chọn 2 thao tác có ~x~ đều bằng ~6~. Có thể chỉ ra rằng không có dãy thao tác để biến ~n = 6~ thành ~m = 216~ với chỉ 1 thao tác.
Ở test case thứ 5, ~n = 4~, ~m = 2~. Do ~n > m~, và các thao tác không thể giảm số ~n~, nên không tồn tại dãy thao tác thỏa mãn.
Bình luận
this problem was so ez ez everyone was kid noob haha rookie chicken
Ấn Vào Đây
include <bits/stdc++.h>
using namespace std;
define ll long long
ll gcd(ll a, ll b) { while (b) { ll r = a % b; a = b; b = r; } return a; }
int main() { ios::syncwithstdio(0); cin.tie(0); int t; cin >> t; while (t--) { ll n, m; cin >> n >> m;
}
Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.