3A + 1 probléma, hogy áll ma? :)

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 szorzzuk 3-mal plusz 1, és innét megint előlről, amíg nem lesz az eredmény 1.

Általános iskolában találkoztam a problémával, egy jó fej matek tanárom volt, ő adott egy könyvet amiben benne volt. Most valahogy felmerült, mert láttam egy site-on BOINC-kel kapcsolatban.

Kíváncsi lennék van-e új eredmény? :)

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

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/

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)