2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Удивительное совпадение
Сообщение06.06.2021, 20:26 
Аватара пользователя


22/11/13
02/04/25
549
Обратите внимание на разность последовательностей 1+A000120(A025480(n)) и A106487(n): c 0 по 63 члены они совпадают, далее до 101 разность по модулю - единица.

Можно как-нибудь получить больше членов A106487?

-- 06.06.2021, 21:34 --

А, там даже комментарий есть внизу покруче, но он мало что добавляет относительно продолжения.

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение06.06.2021, 22:05 
Заслуженный участник
Аватара пользователя


23/07/08
10909
Crna Gora
На страничке OEIS A106487 есть программа на Lisp-подобном языке Scheme. С этим языком я не то что не знаком, даже и названия не слышал.
Я зашёл на сайт JDoodle (https://www.jdoodle.com), там есть онлайн-компилятор Scheme и небольшая демонстрационная программка, показывающая, что компилятор работает. Вместо неё вставил программу из OEIS. Столкнулся с двумя вопросами:
1) Как выводить результаты? Вот так:
(display (A106487 12))
вычисляет и выводит A106487(12). Примитивно, но Вы наверняка найдёте что-то более удобное.
2) Программа в исходном виде выдаёт ошибку:
*** ERROR: unbound variable: |1+|
Я не знаю, что значит «неограниченная переменная», но понял, что надо сделать. В двух местах программы встречается сомнительная конструкция (1+ i), я заменил её на (+ 1 i).

В итоге программа вместе с тестовыми запросами (вычислить A106487 для $n=0...10$) приобрела такой вид:
код: [ скачать ] [ спрятать ]
Используется синтаксис Scheme
(define (A106487 n) (cond ((zero? n) 1) (else (apply + (map A106487 (map shr (on-bit-indices n)))))))
(define (shr n) (if (odd? n) (/ (- n 1) 2) (/ n 2)))
(define (on-bit-indices n) (let loop ((n n) (i 0) (c (list))) (cond ((zero? n) (reverse! c)) ((odd? n) (loop (/ (- n 1) 2) (+ 1 i) (cons i c))) (else (loop (/ n 2) (+ 1 i) c)))))
(display (A106487 0)) (newline)
(display (A106487 1)) (newline)
(display (A106487 2)) (newline)
(display (A106487 3)) (newline)
(display (A106487 4)) (newline)
(display (A106487 5)) (newline)
(display (A106487 6)) (newline)
(display (A106487 7)) (newline)
(display (A106487 8)) (newline)
(display (A106487 9)) (newline)
(display (A106487 10)) (newline)
 

Все ответы правильные. Мне кажется, это ещё более удивительное совпадение.
Пожалуйста, прежде всего, проверьте, что для всех $n$ до 101 программа выдаёт правильные результаты.

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение06.06.2021, 22:16 


14/01/11
3040
svv в сообщении #1521486 писал(а):
*** ERROR: unbound variable: |1+|
Я не знаю, что значит «неограниченная переменная»

Мне кажется, тут это скорее означает "несвязанная".

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение06.06.2021, 22:49 
Заслуженный участник
Аватара пользователя


23/07/08
10909
Crna Gora
Точно, unbound же, а не unbounded.

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение06.06.2021, 22:57 
Заслуженный участник
Аватара пользователя


01/09/13
4656
svv в сообщении #1521486 писал(а):
Я не знаю, что значит «неограниченная переменная», но понял, что надо сделать. В двух местах программы встречается сомнительная конструкция (1+ i), я заменил её на (+ 1 i).

"не замкнутая" (в смысле исчисления высказываний). "i" может быть просто переменной, а может быть мнимой единицей. Что бы выделить второй случай часто пишут "1i" (лучше без пробела - более читабельно).
Но вот, возможно заменить нужно было на "1+1i" (иначе не понятно зачем плюс).

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение06.06.2021, 23:03 
Заслуженный участник
Аватара пользователя


23/07/08
10909
Crna Gora
(n-1)/2 в Scheme записывается как
(/ (- n 1) 2)
И, аналогично, 1+i записывается как (+ 1 i)
Жуть.

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение07.06.2021, 00:05 
Заслуженный участник
Аватара пользователя


01/09/13
4656
svv в сообщении #1521490 писал(а):
Жуть

не знал.....
но польская нотация это удобно :D только если скобки необязательны

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение07.06.2021, 08:46 


30/01/17
245
svv в сообщении #1521490 писал(а):
Жуть.

В Lisp есть возможность выполнять часть кода(макросы) на этапе компиляции. Макросы используются для модификации кода.
Простой синтаксис превращает макросы в очень мощный и гибкий инструмент.
Имея в распоряжении только goto можно в пару строк расширить язык, добавив if, while, for.
(На самом деле в Lisp, кроме стандартного набора, есть язык макрос loop для написания циклов)
Сравните это с теми преградами, которые нужно преодолеть, чтобы добавить range-based for в С++.

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение07.06.2021, 12:56 
Заслуженный участник
Аватара пользователя


23/07/08
10909
Crna Gora
Ivan_B, понятно.

В той программе, что я привёл, для вывода значений $\operatorname{A106487}(n)$ при $n=0...10$ я просто $11$ раз подряд вызываю функцию с конкретным значением $n$, потому что не знаю, как записать цикл. Вы не могли бы подсказать, как это сделать? Обратите внимание, что слово loop в программе встречается, т.е. компилятор Scheme на JDoodle его понимает.

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение07.06.2021, 13:17 
Аватара пользователя


22/11/13
02/04/25
549
svv в сообщении #1521486 писал(а):
Пожалуйста, прежде всего, проверьте, что для всех $n$ до 101 программа выдаёт правильные результаты.
Сделал слепляющую формулу в Excel для команды вывода, все верно. Прогнал пока 4096 значений, результат следующий:

0 64
1 128
2 64
0 64
1 128
2 64
0 64
1 128
2 64
0 64
1 128
2 64
1 64
2 128
3 64
1 64
2 128
3 64
1 64
2 128
3 64
1 64
2 128
3 64
1 64
2 128
3 64
1 64
2 128
3 64
1 64
2 128
3 64
1 64
2 128
3 64
2 64
3 128
4 64
2 64
3 128
4 64
2 64
3 128
4 64
2 64
3 128
4 64

Справа паттерн угадывается, но еще не факт.

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение07.06.2021, 13:43 
Заслуженный участник
Аватара пользователя


23/07/08
10909
Crna Gora
Слева $4$ раза повторяется $0,1,2$, потом $8$ раз повторяется $1,2,3$. Интересно, сколько раз повторится $2,3,4$?

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение07.06.2021, 16:20 


30/01/17
245
svv в сообщении #1521563 писал(а):
не знаю, как записать цикл. Вы не могли бы подсказать, как это сделать?

Используется синтаксис Scheme
(define (print-A106487 n)
   (display (A106487 n))
   (newline))

(dotimes (i 11) (print-A106487 i))


То, что я писал о loop относится к Сommon Lisp.

 Профиль  
                  
 
 Re: Удивительное совпадение
Сообщение07.06.2021, 17:29 
Заслуженный участник
Аватара пользователя


23/07/08
10909
Crna Gora
Спасибо.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group