Любое целое число может быть выражено как k * 2 ^ m, где k нечетно. Чтобы понять почему, напишите любое число в двоичном виде. Начиная справа (младший значащий бит), будет строка из всех нулей. Это может быть пустая строка. Количество нулей м. Остальные биты составляют k. младший значащий бит k равен единице (потому что если бы он был нулем, вы бы просто расширили строку нулей), поэтому k нечетно.
Чтобы найти k и m, вы, вероятно, напишите простой цикл (в данном случае Python):
def k_and_m(n):
k, m = n, 0
while (k % 2) == 0:
k >>= 1
m += 1
return k, m