Algebra Dator Lab 4, Problem 10
Även i denna uppgift använder vi samma rekursionsformel som finns i arbetsbladet (som ger att om är jämt och om är udda).
Hitta det minsta tal i för vilket INTE blir mindre än eller lika med 4 efter 300 iterationer.
Svar:
Ledning: Läs arbetsbladet! och definiera en funktion av två variabler så här:
f[m_, n_] := f[m,n] = If[Divisible[f[m,n - 1], 2], f[m,n - 1]/2, 3*f[m,n - 1] + 1];
f[m_, 1] := m
f[m,n] ger nu resultatet av n-1 iterationer med startvärdet m. Låt n= 300 och skapa en lista av f:s värden då m=1,2,3...,M där M är ett stort heltal (experimentera!).
Jag har löst problemet, koden till mathematica är följande:
Clear[f]
f[m_, 1] = m;
f[m_, n_] := f[m, n] = If[Divisible[f[m, n - 1], 2], f[m, n - 1]/2, 3*f[m, n - 1] + 1];
Dyn = Table[f[m, n], {m, 1, 1000}, {n = 300}];
dd = Select[Dyn, (Last[#] != 4) && (Last[#] != 2) && (Last[#] != 1) &]
Svar som du vill hitta är den minsta m, som ger dig något annat lösning än siffror mindre eller lika med 4, INTE det minsta tal som du får efter beräkning.
dd = Select[Dyn, (Last[#] != 4) && (Last[#] != 2) && (Last[#] != 1) &] gör att mathematica tar bort alla siffror mindre eller lika med 4.
{m, 1, 1000} innebär alla tal m från 1 tills 1000, så vad du gör är att du TESTAR ALLA möjliga TAL tills du får ett svar,
om du inte får ett svar så tar du ett större tal, ex: {m, 1, 1000} {m, 1, 5000} .
om du får ett svar så försöka minska tal så små så möjligt, tills du får den minsta tal som ger dig ett svar, ex: {m, 1, 1000} → {m, 1, 381} .