Skip to content
This repository has been archived by the owner on Apr 11, 2023. It is now read-only.
/ collatz_iter Public archive

Collatz Conjecture (3n+1 problem) Iterator

License

Notifications You must be signed in to change notification settings

ikar49/collatz_iter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Collatz Conjecture (3n+1 problem) Iterator

Этот мини-проект создавался, чтобы немного попрактиковаться в написании простых макросов и итераторов. Особой практической ценности в нём нет, поэтому проект перенесён в архив и оставлен как пример моего мышления и подхода к написанию кода.

Условия

  1. Задано натуральное число N.
  2. Если N - чётное, то N = N / 2;
  3. Если N - нечётное, то N = 3 * N + 1;
  4. Вернуться к шагу 1.

Гипотеза

Гипотеза гласит, что все числа сводятся к циклу 4 -> 2 -> 1. Или, иными словами, гипотеза заключается в том, что какое бы начальное число N мы ни взяли, рано или поздно мы получим единицу. Доказать или опровергнуть математики на данный момент эту гипотезу не могут.

Я ничего доказывать тоже не буду, ибо не математик, а просто сделаю простенький итератор на Rust, который будет инициализироваться числом N и возвращать следующий элемент, согласно заданным условиям.

Реализация

В качестве Item у итератора - Result.

Итератор CollatzIterator реализован для всех NonZero-версий примитивных целых чисел, включая знаковые.

При этом работа с отрицательными числами не рассматривается. Попытка инициализировать итератор отрицательным числом приведёт к возврату из итератора ошибки.

В случае переполнения числа итератор возвращается ошибку.

Итерирование прекращается (next() возвращает None) либо после достижения 1, либо после ошибки.

Ограничения

Работать с числами больше 2^128 не получится.

License

Licensed under either of

at your option.

SPDX-License-Identifier: MIT OR Apache-2.0

About

Collatz Conjecture (3n+1 problem) Iterator

Resources

License

Stars

Watchers

Forks

Languages