defineer de ggd2 functie (Euclides' algoritme) zoals uitgelegd tijdens het college (het kan met 1 definitie en een If, of met twee conditionele definities /; )

ggd2[u_,v_]:=If[v==0,u,ggd2[v,Mod[u,v]]]

voer deze commando's uit en ga na wat er gebeurt

ggd2[100,12]

ggd2[1014,91]//Trace

Timing[ggd2[1234567890,234567]]

MemoryInUse[]

Timing[ggd2[1234578967890,234598967]]

MemoryInUse[]

defineer de ggd1 functie zoals uitgelegd tijdens het college

ggd1a[u_,v_]:=Module[{},t=Min[u,v];While[Mod[u,t]≠0||Mod[v,t]≠0,t--];t]

ggd1a[1001,182]//Trace

Timing[ggd1a[1234567890,23456117]]

Met de Compile functie kunnen numerieke berekeningen in Mathematica versneld worden. Maak de functie ggd1b zelf af

ggd1b=Compile[{u,v},Module[{t},t=Min[u,v];While[Mod[u,t]≠0||Mod[v,t]≠0,t--];t]]

Merk op dat het essentieel is dat t een locale variabele is, anders wordt het niet sneller! Test dit

Timing[ggd1b[1234567890,23456117]]

En vergelijk de rekentijd met als input dezelfde getallen.Wanneer het datatype van de argumenten tevoren bekend is, kan de berekening nog sneller :

ggd1c=Compile[{{u,_Integer},{v,_Integer}},Module[{t},t=Min[u,v];While[Mod[u,t]≠0||Mod[v,t]≠0,t--];t]]

Maak de functie ggd1c zelf af en vergelijk de rekentijd met als input dezelfde getallen. Maak een overzicht van alle rekentijd en trek conclusies.

Timing[ggd1c[1234567890,23456117]]

ggd1d=Compile[{{u,_Integer},{v,_Integer}},Module[{},t=Min[u,v];While[Mod[u,t]≠0||Mod[v,t]≠0,t--];t]]

Timing[ggd1d[1234567890,23456117]]