> If you wanted a c++26 preconditon for collatz tho, here it is.
cpp bool collatz(unsigned long long n)
{
while (n != 1)
n = n % 2 ? 3 * n + 1 : n / 2;
return true;
}
You’ll need to add code to detect cycles other than
1, 4, 2, 1, 4, 2,… to that. That can be done in constant space (
https://en.wikipedia.org/wiki/Cycle_detection#Floyd’s_tortoi...)
Ideally, you also need a way to detect runs towards infinity. That is harder.
Otherwise, an optimising compiler can use the forward progress guarantee and optimize that to:
cpp bool collatz(unsigned long long n)
{
return true;
}
and then completely remove the precondition.