Hallo Tobi,
bevor man sowas codiert, sollte man sich das Produkt genauer anschauen=i=1∏n2i3i+3=i=1∏n(23⋅ii+1)=(23)n⋅i=1∏n(ii+1)=(23)n⋅(12⋅23⋅34⋅⋯⋅n−1n⋅nn+1)=(23)n(n+1)leider kann man eine Gleichung wie(23)n(n+1)=xnicht ohne weiteres nach n auflösen. Aber trotzdem vereinfacht sich der Algorithmus:
function calc_n(x)
begin
let n = 0
let q = 1
while not(x < q * (n + 1)) do
begin
n = n + 1
q = q * 1.5
end
return n
end
der Algorithmus macht pro Schritt nur noch zwei Multiplikationen statt drei plus einer Division, wenn man es 'klassisch' lösen würde. Außerdem hat er eine Komplexität von O(n) statt O(n2) wie z.B. der von döschwo ;-)
Gruß Werner