Script:
#!/bin/sh
N="$1"
while [ $N != 1 ]
do
echo $N
if [ $(($N % 2)) = 0 ]
then
N=$(($N / 2))
else
N=$((3 * $N + 1))
fi
done
echo $N
Érdekes számokat ad még, hogyha a keletkező sorozat darabszámát iratjuk ki.
for i in {1..100}; do ./script.sh $i | wc -l; done
- log69 blogja
- A hozzászóláshoz be kell jelentkezni
- 1023 megtekintés
Hozzászólások
A rendes neve ennek Collatz-sejtes. Megoldatlan a problema, a Wikipedian egesz jo osszefoglalas van rola, de ez meg jobb: http://xkcd.com/710/
- A hozzászóláshoz be kell jelentkezni
a nevéről nem ismertem, a wikipedia tényleg jó, köszi :)
http://en.wikipedia.org/wiki/Collatz_conjecture
- A hozzászóláshoz be kell jelentkezni
elgondolkodtam mennyi munka lehet megcsinálni egy ilyen minőségi oldalt a wiki-n, kíváncsi lennék hány nap vagy hét a kutató munkával együtt.
- A hozzászóláshoz be kell jelentkezni
Legyen itt rekurzívan is, Lua-ban. :D
3a_plus_1.lua:
--[[
Biztos ismeritek a 3A+1 problémát. Ha van köztetek matematikus, meg tudná mondani, hogyan áll ma ennek a bizonyítása? Vagyis hogy mindig lefut az algoritmus 1-re?
Az algoritmus annyi, hogy ha a szám páros, akkor osztjuk 2-vel, ha páratlan, akkor meg szorozzuk 3-mal plusz 1, és innét megint elölről, amíg nem lesz az eredmény 1.
Innen: http://hup.hu/node/91066
--]]
function three_a_plus_one(number)
print(number)
if number == 1 then
return 1
end
if number % 2 == 0 then
return three_a_plus_one(number/2)
else
return three_a_plus_one(number*3+1)
end
end
three_a_plus_one(232323221121212134343434)
- A hozzászóláshoz be kell jelentkezni
rekurzív megoldásra nem gondoltam volna :D
- A hozzászóláshoz be kell jelentkezni