0 Daumen
584 Aufrufe

Aufgabe:

Schreiben Sie einen Algorithmus in Pseudocode, der zu einer gegebenen reellen Zahl xR x \in \mathbb{R} die kleinste Zahl n n bestimmt, so dass i=1n3i+32i \prod \limits_{i=1}^{n} \frac{3 i+3}{2 i} größer als x x ist.


Problem/Ansatz:

Muss bis Morgen eine Hausaufgabe abgeben. Kann mir hier jemand Helfen ?

Avatar von

2 Antworten

+1 Daumen
 
Beste Antwort

Hallo Tobi,

bevor man sowas codiert, sollte man sich das Produkt genauer anschauen=i=1n3i+32i=i=1n(32i+1i)=(32)ni=1n(i+1i)=(32)n(213243nn1n+1n)=(32)n(n+1)\phantom{=} \prod \limits_{i=1}^{n} \frac{3 i+3}{2 i}\\ = \prod \limits_{i=1}^{n} \left(\frac{3}{2}\cdot \frac{i+1}{i}\right)\\ = \left(\frac{3}{2}\right)^n\cdot\prod \limits_{i=1}^{n} \left(\frac{i+1}{i}\right)\\ = \left(\frac{3}{2}\right)^n\cdot\left(\frac{2}{1}\cdot \frac{3}{2}\cdot \frac{4}{3}\cdot\,\dots \cdot \frac{n}{n-1}\cdot \frac{n+1}{n}\right)\\ = \left(\frac{3}{2}\right)^n(n+1)leider kann man eine Gleichung wie(32)n(n+1)=x\left(\frac{3}{2}\right)^n(n+1)= xnicht ohne weiteres nach nn 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)O(n) statt O(n2)O(n^2) wie z.B. der von döschwo ;-)

Gruß Werner

Avatar von 49 k
... nicht ohne weiteres nach nn auflösen

falls Deine Programmierumgebung (wie z.B. diese) über die Lambert-W-Funktion verfügt, dann ginge auch dies:

function calc_n(x)
begin
return floor(lambert_w0(x * 1.5 * log(1.5)) / log(1.5))
end

das wäre dann sogar O(1)O(1), vorausgesetzt dass lambert_w0 auch O(1)O(1) hat.

0 Daumen

begin
n = 0
p = 1
while p <= x do
   begin
      p = 1
      n = n + 1
      for i = 1 to n step 1 do p = p * (3i+i) / (2i)
   end
print n
end

Avatar von 47 k

Ein anderes Problem?

Stell deine Frage