حدس کولاتز (Collatz Conjecture)

پنجشنبه, ۲۸ بهمن ۱۴۰۰، ۱۱:۵۴ ب.ظ

یه حدسی وجود داره به اسم حدس کولاتز (Collatz conjecture) که میگه شما :

1 - هر عدد طبیعی میخوای انتخاب کن 

2 - اگه زوج بود اونو تقسیم بر 2 کن

3 - اگه فرد بود اونو سه برابر کن و سپس به علاوه 1 کن .

4 - برگرد به مرحله 2 و این روند رو هی تکرار کن

5 - نهایتا به طور اتفاقی میرسی به عدد 1 !!!

تست کنیم : مثلا من عدد 7 رو انتخاب میکنم . 

7 فرده . پس سه برابرش میکنم و به علاوه یک میکنم . میشه 22 . 

22 زوجه . تقسیم بر 2 میکنم . میشه 11

11 فرده . ضربدر 3 سپس به علاوه 1 . میشه 34

34 زوجه . تقسیم بر 2 . میشه 17

17 فرده . سه برابر سپس +1 . میشه 52

52 زوجه . تقسیم بر 2 . میشه 26

26 زوجه . تقسیم بر 2 . میشه 13

13 فرده . 3 برابر سپس +1 . میشه 40

40 زوجه . تقسیم بر 2 . میشه 20

20 زوجه . تقسیم بر 2 . میشه 10

10 زوجه . تقسیم بر 2 . میشه 5

5 فرده . ضربدر 3 سپس به علاوه 1 . میشه 16

16 زوجه . تقسیم بر2 . میشه 8

8 زوجه تقسیم بر 2 میشه 4

4 زوجه تقسیم بر 2 میشه 2

2 زوجه تقسیم بر 2 میشه 1

1 فرده ضرب در 3 سپس به علاوه 1 میشه 4

4 زوجه تقسیم بر 2 میشه 2

2 زوجه تقسیم بر 2 میشه 1

 

دقت کنید این آخرش که قرمز رنگش کردم دیگه افتاد تو یه حلقه ی بی نهایت بین 4 و 2 و 1. یعنی هی 1 میشه . باز دوباره بر میگرده 4 . تقسیم بر 2 میشه 2 . دوباره تقسیم بر 2 میشه 1 . و دوباره از اول برمیگرده به 4 تا بینهایت بین این چرخه گیر میکنه . اینکه میگیم نهایتا میرسه به عدد 1 یعنی این . 

 

شما هر عددی میخوای انتخاب کن و با این روند تست کن . جالب اینجاست که ریاضی دان ها هنوز نتونستن دلیل این موضوع رو پیدا کنن و جالبتر اینکه هنوز هم هیچ مثال نقضی براش پیدا نشده . یعنی عددی پیدا نشده که از این قاعده پیروی نکنه . 

 

جملات دو ریاضی دان معروف راجع به این حدس :

پال اوردوش : ممکن است ریاضیات برای چنین مسائلی هنوز آمادگی نداشته باشد

جفری لاگاریاس : حدس کولاتز مسئله‌ای است که دشواری عجیباً زیادی داشته و کاملاً از دسترس ریاضیات کنونی خارج است

 

یکم سخته خودتون هی دستی بخواید این اعداد رو تست کنید . سایت های آنلاینی هستند که یه عدد بهشون میدید و طبق روند حدس کولاتز پیش میرن ببینن آخر به چه عددی میرسه . میتونید هر عددی میخواید از اعداد طبیعی بدید به این سایتا و به همون حلقه 4 و 2 و 1 ختم میشه . 

https://goodcalculators.com/collatz-conjecture-calculator/

این سایت میتونه حساب کنه این که گفتمو .

 

خودتونم اگه برنامه نویسی کار میکنید خیلی ساده میشه با یه سورس پایتونی پیادش کرد :

n = int(input("Number : "))

steps = 0
while n != 1:
    if n % 2 == 0:
        n /= 2
    else:
        n *= 3
        n += 1
    print(int(n))
    steps += 1

print()
print("-----------------------")
input("steps : {}".format(steps))

 

خلاصه اینکه این حدس برای اعداد مثبت تا ۱۰ × ۲۵۸ ( یه عدد 19 رقمی) تست شده و هیچ کدومشون از قاعده خارج نشدن . 

 

 

 

موافقین ۲ مخالفین ۰

عژیب

از ایناس که ریاضی دانا خودشونو واسش میکشن جوابش پیدا شه  اینا :"))

اگه اعداد رو حالت درختی براشون این قاعده رو ترسیم کنن اینجوری میشه شکلش .

اینم به عشق دات نت کارا

همیشه پرچممون بالاست

Console.ForegroundColor = ConsoleColor.DarkGreen;
int number = 0;
Console.WriteLine("Please Enter Your Number :");
try
  {
     number = int.Parse(Console.ReadLine());
     Console.Clear();
  }
catch
  {
     Console.Clear();
     Console.ForegroundColor = ConsoleColor.DarkRed;
     Console.WriteLine("Please Try Again");
     Console.ReadKey();
     Environment.Exit(0);
  }
while (number != 1)
  {
     Console.Write(number.ToString() + " ");
     if (number % 2 == 0)
           {
              number = number / 2;
           }
     else
           {
              number = number * 3 + 1;
           }
     Thread.Sleep(350);
  }
Console.Write(number);
Console.ReadKey();

 

البته برای اون Thread هم باید کتابخونه  System.Threading رو using کنی

 

پ.ن : چون C.P.P کار کردی بنظرم بفهمی چی به چچیه درست میگم ؟

ایول . عالی

براچی sleep گذاشتی اصلا ؟ 
اره مشخصه .

Sleep رو همینجوری ب قول استاد مدائنی برای خوشگلاسیون گذاشتم

اینجوری بین هر عدد ک میاد ی کم فاصله میوفته و کاربر حس میکنه برنامه داره شرطا رو چک میکنه یکم باحال تره

دلت میاد سرعت کارو فدای خوشگلاسیون کنی :)))) ؟
اره ولی خب به نظرم تو اینجور الگوریتما اینکارو نباید کرد . چون سرعت نکته اصلی ماجراس . 

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">