Гипотеза сиракуз

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by v0l0d1ka, 14 Oct 2010.

  1. v0l0d1ka

    v0l0d1ka Banned

    Joined:
    16 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    В ниже приведенной программе реализована "гипотеза сиракуз".

    Code:
    program GipotezaSirakuz;
     var  n:integer;
    begin
        writeln('Введите натуральное число');
        readln(n);
        while n<>1 do begin
            if n mod 2 = 0 then n:=n div 2
                else n:=(3*n+1) div 2;
            write(' - ',n);
         end;
         readln;
    end.
    

    Последовательно запуская программу с разными n, нетрудно убедиться, что фрагменты этих цепочек повторяются, напр. 8 - 4 - 2 - 1 и 5 - 16 - 8 - 4 - 2 - 1.
    Как использовать этот факт при подсчете средней длины цепочек для чисел (n) из некоторого интервала n1, n2, n3 ..... , nk. (n: integer)?
    Что потребуется изменить в вышеприведенном фрагменте?
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Выучить хоть основы и дописать 3 строчки кода.
    допустим добавь число K = 0 затем после while делай inc(k);
    а потом вконце выведи K
     
  3. v0l0d1ka

    v0l0d1ka Banned

    Joined:
    16 Feb 2010
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    Чтобы посчитать длину цепочки.

    Речь о нескольких цепочках и о повторах в них