Ulam Spiral



С этой задачей я столкнулся давно, когда искал идею для tiny intro.


сама Скатерть_Улама дает массу поводов для решения задач.
Например, задача о построении чисел по указанной схеме:


решается так:


Procedure IsPrime(number.l)

  If number = 2
    ProcedureReturn 1
  ElseIf number % 2 = 0
    ProcedureReturn 0
  Else
    x = Sqr(number)
    For t = 3 To x Step 2
      If number % t = 0
        ProcedureReturn 0
      EndIf
    Next t
  EndIf

  ProcedureReturn 1

EndProcedure

    x.i=127;координаты
    y.i=95
    direction.i=0
    moves.i=1
    move.i=0
    moveswitch.i=0
    
    mo=0
;    cc.a=0
    Repeat
      Select direction
        Case 0;1
          x=x+1
        Case 1;2
          y=y-1
        Case 2;3
          x=x-1
        Case 3;4
          y=y+1
      EndSelect
      
      move=move+1
      If move=moves
        move=0
        moveswitch=moveswitch+1
       If moveswitch = 2
           moveswitch=0;
           moves=moves+1
      EndIf
       direction=(direction+1)&3
     EndIf

;напечатать число mo по координатам (x,y)

       mo+1
      Until (x=0)And (y=0)



Реализовать алгоритм несложно, на экране ZX Spectrum появится этакий прямоугольник. Как вариант можно ставить точку в том случае, если число простое. И вот тут-то завертелось. Существует масса способов определения просто число или составное:


Однако вычисление сожрет массу времени. Любой птушник скажет, что можно задействовать решето Эратосфена. А при работе программы понадобится 64548 вычислений. Опять получается либо долго считать либо понадобится память.

Память можно сократить, если немного подумать: 65536/8=8192, столько байт и понадобится. Таблица генерируется легко, засовывается в память, код модифицируется до проверки простое число или нет, ужасм выплевывает снапшот и картинка появляется!

снапшот+исходники. Наверное, картинка не похожа на другие найденные в интернетах. Может быть, потому, что отчет начат с нуля?

2 комментария

avatar
Впечатляющая работа. Хорошая статья!
Правда, не хочется тебя огорчать, чисто с художественной точки зрения «скатерть Улама» так себе… Кажется что точки поставлены по чуть модифицированному rnd. Боюсь, неискушенные зрители ничего не поймут… :)

Я тоже ищу какую-то интересную математику для микро-демки, но ничего прям впечатляющего пока не нашел…
avatar
Согласен, но есть масса вариаций визуализации спирали Улама, если поискать в интернетах.

Максимум, на что меня хватило:

www.pouet.net/prod.php?which=59786
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.