Vấn đề sau được hỏi trong một cuộc phỏng vấn. Được cung cấp số 11 n (trong đó n
∈ [0, 1000]
), nhận số lượng kết quả là 1
. Ví dụ, n = 3, 11 = 1331, do đó kết quả dự kiến sẽ là 2. Hoặc cho n = 6, 11 = 1.771.561, kết quả dự kiến sẽ là 3.Tính số lượng kết quả là 11^n
Suy nghĩ đầu tiên của tôi là rằng nó phải làm điều gì đó với pascal's triangle và binomial coefficients (bởi vì như chúng ta biết chỉ cần tính toán pow(11, 1000)
không hoạt động, ít nhất là trong C).
Tôi nghĩ bằng cách đơn giản lặp qua các cột trong tam giác của pascal sẽ cho tôi kết quả, nhưng điều đó rõ ràng không hoạt động.
Vì vậy, tôi đã bị kẹt ngay bây giờ. Suy nghĩ tiếp theo của tôi là sử dụng một số loại bignum library
để giải quyết vấn đề, nhưng theo ý kiến của tôi phải có một cách khác để giải quyết loại nhiệm vụ này.
Cập nhật Tôi quên đề cập rằng tôi phải giải quyết nhiệm vụ này với C/Objective-C.
Bạn không cần bất kỳ thư viện bignum nhân 11 :-) –
Python có thể đếm số của '1's trong' 11^100000' trong khoảng '2.09s', vì vậy đối với những hạn chế của bạn, thư viện bignum nên hoạt động. Tôi không nghĩ có bất kỳ giải pháp phân tích nào cho vấn đề này. – Blender
Âm thanh như một ứng cử viên tuyệt vời cho tiền xử lý. – cheeken