Chia
View as PDF
Submit solution
Points:
50.00
Time limit:
1.0s
Memory limit:
64M
Input:
stdin
Output:
stdout
Author:
Problem type
Allowed languages
Assembly, Awk, Brain****, C, C++, Java, Pascal, Perl, Python, Sed, Text
Cho một số nguyên dương ~n~. Bạn có thể thực hiện bất kỳ thao tác nào sau đây với số lần tùy ý (có thể là không lần nào):
- Thay ~n~ bằng ~n/2~ nếu ~n~ chia hết cho 2
- Thay ~n~ bằng ~2*n/3~ nếu ~n~ chia hết cho 3
- Thay ~n~ bằng ~4*n/5~ nếu ~n~ chia hết cho 5
Ví dụ: bạn có thể thay ~n = 30~ bằng 15 với thao tác 1, hoặc bằng 20 với thao tác 2 hoặc bằng 24 với thao tác 3.
Nhiệm vụ của bạn là tìm ra số thao tác tối thiểu cần thiết để từ ~n~ ta thu được số 1 hoặc nói rằng không thể thực hiện được.
Bạn phải trả ~q~ truy vấn độc lập.
Dữ liệu vào
- Dòng đầu tiên của đầu vào chứa một số nguyên ~q (1 \leq q \leq 1000)~ là số lượng truy vấn.
- Dòng thứ ~i~ trong ~q~ dòng tiếp theo chứa truy vấn thứ ~i~ gồm một số nguyên ~n (1 \leq n \leq 10^{18})~.
Kết quả
- Chương trình của bạn cần in ra ~q~ dòng, dòng thứ ~i~ chứa câu trả lời cho truy vấn thứ ~i~. Nếu thực hiện được, thì in ra số -1. Nếu có thể thì in ra số lượng thao tác tối thiểu cần thiết để làm điều đó.
Ví dụ 1:
INPUT
7
1
10
25
30
14
27
1000000000000000000
OUTPUT
0
4
6
6
-1
6
72
Loading...