Skip to content

Instantly share code, notes, and snippets.

@rawlik
Created March 25, 2025 10:02
Show Gist options
  • Save rawlik/f9e4f5798ed6ae0347db4f4601801143 to your computer and use it in GitHub Desktop.
Save rawlik/f9e4f5798ed6ae0347db4f4601801143 to your computer and use it in GitHub Desktop.
Logarithmic-complexity power
fn logpow(base: u32, exp: u32) -> u32 {
let mut restexp = exp;
let mut intlog = 0_u32;
while restexp > 1 {
restexp /= 2;
intlog += 1;
}
restexp = exp - 2_u32.pow(intlog);
let mut res = base;
for _ in 0..intlog {
res = res.pow(2);
}
for _ in 0..restexp {
res *= base;
}
res
}
fn main() {
assert_eq!(2_u32.pow(4), logpow(2, 4));
assert_eq!(2_u32.pow(3), logpow(2, 3));
for base in 1_u32..5_u32 {
for exp in 1_u32..8_u32 {
assert_eq!(base.pow(exp), logpow(base, exp));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment