All2khoff
Продвинутый
- Сообщения
- 353
- Репутация
- 65
Набрел в сети на интересную гипотезу Коллатца:
Если число нечетное то умножаем его на 3 и добавляем 1
Если число четное то делим его на два.
Любое целое положительное число если следовать алгоритму обязательно попадет в цикл 4-2-1
набросал в меру разумений скрипт.
но в силу своей слабости в программировании не ведаю как ускорить процесс подсчета. прошу помощи в коррекции данной заготовки в сторону ускорения операции вычисления. хотябы количество итераций считать, на числах от 1000000.
Сам скрипт не является каким-то проектом и/или частью решения какой-то другой задачи, чисто для саморазвития.
Если число нечетное то умножаем его на 3 и добавляем 1
Если число четное то делим его на два.
Любое целое положительное число если следовать алгоритму обязательно попадет в цикл 4-2-1
набросал в меру разумений скрипт.
Код:
#include <math.au3>
Global $I_Var, $a, $b=0
For $a=1 to 1000 ;диапазон чисел
;~ ConsoleWrite("начинаем пересчет "&$a&@CRLF)
mathc($a)
Next
Func mathc($I_Var)
If $I_Var > 1 Then ;пока больше 1 условия выполняются
$I_Result = _MathCheckDiv($I_Var, 2) ;проверка числа чет-нечет
Select
Case $I_Result = -1 Or @error = 1 ;некорректное число
ConsoleWrite("Неверное число"&@CRLF)
Case $I_Result = 1 ;чило нечетное
;~ ConsoleWrite($I_Var&@CRLF)
$b=$b+1 ;счетчик итераций
$I_Var = ($I_Var*3)+1
mathc($I_Var) ;вызов следующей итерации
Case $I_Result = 2 ;число четное
;~ ConsoleWrite($I_Var&@CRLF)
$b=$b+1 ;счетчик итераций
$I_Var = $I_Var/2
mathc($I_Var) ;вызов следующей итерации
Case Else ;неизвестная ошибка
ConsoleWrite("Не удалось определить число"&@CRLF)
EndSelect
Else
ConsoleWrite("закончили пересчет "& $a&@CRLF)
ConsoleWrite("Количество итераций "& $b&@CRLF)
$b=0 ;обнуление счетчика итераций
EndIf
EndFunc
но в силу своей слабости в программировании не ведаю как ускорить процесс подсчета. прошу помощи в коррекции данной заготовки в сторону ускорения операции вычисления. хотябы количество итераций считать, на числах от 1000000.
Сам скрипт не является каким-то проектом и/или частью решения какой-то другой задачи, чисто для саморазвития.