thể trùng lặp:
The most efficient way to implement an integer based power function pow(int, int)quyền hạn đếm (ví dụ 2^11) một cách nhanh chóng
Làm thế nào tôi có thể tính toán quyền hạn với thời gian chạy tốt hơn?
Ví dụ: 2^13.
Tôi nhớ nhìn thấy ở đâu đó rằng nó có cái gì để làm với việc tính toán sau:
2^13 = 2^8 * 2^4 * 2^1
Nhưng tôi không thể nhìn thấy cách tính toán mỗi thành phần của phía bên phải của phương trình và sau đó nhân chúng sẽ giúp tôi.
Bất kỳ ý tưởng nào?
Chỉnh sửa: Tôi đã có ý nghĩa với bất kỳ cơ sở nào. Làm thế nào để các thuật toán bạn đã đề cập dưới đây, đặc biệt là "Số mũ bằng cách bình phương", cải thiện thời gian chạy/phức tạp?
trùng lặp: http: // stackoverflow.com/questions/101439/cách-hiệu quả nhất-cách-to-thực hiện-an-số-dựa-điện-hàm-powint-int –
"Số mũ bằng bình phương" tính 'cơ số^exp' trong' log (exp) ' các bước, trong đó * log * là logarit với cơ số 2. –
@Nick D, tôi biết tôi nói rằng trong câu trả lời của tôi, nhưng tôi đã nhận ra tôi hơi sai. Đó là cơ bản chính xác nếu bạn đang sử dụng số nguyên chuẩn. Nhưng một khi bạn nhận được để sử dụng bignums nó trở thành về cơ bản 'O (log (n)^2)' bởi vì các nhân mất nhiều hơn O (1) thời gian. – Omnifarious