Cho một số nguyên num làm đầu vào. Mục tiêu là tìm số lượng số 0 đuôi trong tích 1^1 × 2^2 × 3^3 × ... × num^num.
Ví dụ
Đầu vào
num=5
Đầu ra
Số 0 đuôi trong tích (1^1)*(2^2)*(3^3)*(4^4)*.. là: 5
Giải thích
Số lượng 2 và 5 trong tích sẽ là: 1^1 * 2^2 * 3^3 * 4^4 * 5^5 = 1^1 * 2^2 * 3^3 * (2^2)^4 * 5^5. Vậy tổng cộng 10 số 2 và 5 số 5, min là 5 nên số 0 đuôi sẽ là 5.
Đầu vào
num=10
Đầu ra
Số 0 đuôi trong tích (1^1)*(2^2)*(3^3)*(4^4)*.. là: 15
Giải thích
Số lượng 2 và 5 trong tích: 1^1 * 2^2 * 3^3 * 4^4 * 5^5 * 6^6 * 7^7 * 8^8 * 9^9 * 10^10 = 1^1 * 2^2 * 3^3 * 4^4 * 5^5 * 6^6 * 7^7 * 8^8 * 9^9 * (2*5)^10. Vậy tổng 20 số 2 và 15 số 5, min là 15 nên số 0 đuôi là 15.
Phương pháp sử dụng
Trong phương pháp này, chúng ta sẽ đếm số lượng 2 và 5 trong phân tích thừa số nguyên tố của mỗi số trong tích. Vì mỗi số được lũy thừa theo chính nó, nên min của số lượng 2 hoặc 5 trong phân tích sẽ cho số 0 đuôi. Vì mỗi cặp 2*5 thêm một số 0 vào tích.
- Nhận số nguyên
numlàm đầu vào. - Hàm
count_trailing(int num)nhậnnumvà trả về số 0 đuôi trong tích. - Khởi tạo biến đếm ban đầu là 0.
- Tạo biến
temp_2 = 0,temp_5 = 0cho số lượng 2 và 5. - Duyệt bằng vòng lặp for từ
i=1đếni<=num. - Lấy
templài. - Khi
tempchia hết cho 2 thì giảm nó thành một nửa và cộngivào biến đếmtemp_2là số lượng 2. - Khi
tempchia hết cho 5 thì chia nó cho 5 và cộngivào biến đếmtemp_5là số lượng 5. - Lấy biến đếm là min của hai biến đếm bằng
count = min(temp_2, temp_5). - Trả về biến đếm làm kết quả.
Ví dụ mã
#include <bits/stdc++.h>
using namespace std;
int count_trailing(int num) {
int count = 0;
int temp_2 = 0;
int temp_5 = 0;
for (int i = 1; i <= num; i++) {
int temp = i;
while (temp % 2 == 0 && temp > 0) {
temp = temp / 2;
temp_2 = temp_2 + i;
}
while (temp % 5 == 0 && temp > 0) {
temp = temp / 5;
temp_5 = temp_5 + i;
}
}
count = min(temp_2, temp_5);
return count;
}
int main() {
int num = 5;
cout << "Số 0 đuôi trong tích (1^1)*(2^2)*(3^3)*(4^4)*.. là: " << count_trailing(num);
return 0;
}
Đầu ra
Nếu chạy mã trên, sẽ tạo ra đầu ra sau:
Số 0 đuôi trong tích (1^1)*(2^2)*(3^3)*(4^4)*.. là: 5