pub fn fast_pow(a: u64, n: u32) -> Option<u64>Expand description
a ning n -darajasi — tez darajaga ko’tarish (binary exponentiation).
G’oya: a⁸ = ((a²)²)². Darajani ikkilik sanoq sistemasida ko’rib,
har qadamda asosni kvadratga ko’taramiz va kerakli bitlarda javobga ko’paytiramiz.
- Time: O(log n) —
a⁶⁴uchun 64 ta emas, atigi 7 ta ko’paytirish! - Overflow bo’lsa
Noneqaytadi.
§Misol
use rust_algorithms::numbers::fast_pow;
assert_eq!(fast_pow(2, 10), Some(1024));
assert_eq!(fast_pow(3, 0), Some(1));
assert_eq!(fast_pow(u64::MAX, 2), None); // overflow