حدس کولاتز (Collatz conjecture)
حدس کولاتز یکی از حدسهای حل نشده در ریاضیات است. این حدس به افتخار لوتار کولاتز، که این موضوع را در سال۱۹۳۷ مطرح کرد، حدس کولاتز نام گرفت. این حدس همچنین به عنوان حدس 3n+1 نیز شناخته میشود. این گونه حدسها میپرسد که آیا یک رشتهٔ خاص از اعداد، صرف نظر از این که چه عددی را به عنوان عدد اولیه انتخاب میکنیم، همیشه به یک صورت تمام میشود. (منبع : ویکی پدیا)
حالت کلی الگوریتم به صورت زیر است:
void Collatz(int Num):
while Num > 1 do:
show Num
if Num mod 2 == 1 then
Num <- 3 * Num + 1
Else
Num <- Num / 2
show Num
int Collatz(int Num) {
int distance = 0;
while (Num > 1) {
cout <<endl<< Num;
distance++;
if (Num % 2 == 1)
Num = 3 * Num + 1;
else
Num /= 2;
}
cout << endl << Num << endl;
return distance;
}
C#:
static int Collatz(int Num)
{
int distance = 0;
while (Num > 1)
{
Console.Write("\r\n" + Num.ToString());
distance++;
if (Num % 2 == 1)
Num = 3 * Num + 1;
else
Num /= 2;
}
Console.Write("\r\n" + Num.ToString());
return distance;
}
VB.NET:
Function Collatz(ByVal Num As Integer) As Integer
Dim distance As Integer = 0
While Num > 1
Console.Write(vbNewLine + Num.ToString())
distance += 1
If Num Mod 2 = 1 Then
Num = 3 * Num + 1
Else
Num /= 2
End If
End While
Console.Write(vbNewLine + Num.ToString())
Return distance
End Function
F#:
let Collatz(Num : int) =
let mutable distance : int = 0
let mutable num : int = Num
while num > 1 do
Console.WriteLine(num.ToString())
distance <- distance + 1
if num % 2 = 1 then
num <- 3 * num + 1
else
num <- num / 2
Console.WriteLine(num.ToString())
distance
Python:
def Collatz(Num):
distance = 0
while Num > 1:
print(int(Num))
distance += 1
if Num % 2 == 1:
Num = 3 * Num + 1
else:
Num /= 2
print(int(Num), "\r\n")
return distance
دانلود سورس کدها: