karatsuba := proc (a, b) local n, u, v, w, x, p, l, m; n := max(length(a), length(b)); if a = 0 or b = 0 then return 0 end if; if n = 1 then return a*b end if; if `mod`(n, 2) = 1 then n := 2^floor(log[2](n)+1) ## Bestimmt die kleinste 2er Potenz groesser als n end if; u := round(a/10^((1/2)*n)); v := a-u*10^((1/2)*n); w := round(b/10^((1/2)*n)); x := b-w*10^((1/2)*n); p := karatsuba(u, w); l := karatsuba(v, x); m := karatsuba(u-v, x-w); return p*10^n+(p+l+m)*10^((1/2)*n)+l end proc