Здравствуйте.
Мне известен способ представления натуральных чисел точками в пространстве размерности
. Интересно было бы увидеть, как в этом пространстве распределены простые числа.
Пожалуйста, помогите закодировать в C++ алгоритм, который я приведу ниже. Потребуется работа с массивами и матрицами, но программа должна получиться несложной. Вся работа выполняется исключительно в натуральных числах.
Алгоритм представления натуральных чисел точками в пространстве размерности 1. Число вычисляется как результат скалярного произведения векторов
и, таким образом, зависит от четырех параметров, которые мы будем считать его координатами:
.
2. Каждый из векторов, например, вектор
принадлежит упорядоченному множеству
где
- номер множества, и имеет в этом множестве номер
.
3. Построение множества
рассмотрим на примере
. Алгоритм его построения следующий:
3.1. Построить матрицу
по правилу:
. В результате (здесь для
) получится "квадрат Паскаля":
3.2. Извлечь из матрицы
первую строку и построить матрицу
содержащую на главной диагонали и первой диагонали под ней эту строку, а остальные элементы имеющую равными нулю:
3.3. Возвести матрицу
в соответствующие степени и получить векторы множества
по правилу:
где
- первый орт (упорядоченное множество векторов
является ни чем иным, как Треугольником Паскаля):
Любое другое множество
строится аналогично при помощи строки с номером
из матрицы
.
4. Построить все множества
при помощи
-тых строк матрицы
.
5. Вычислить все скалярные произведения векторов принадлежащих полученным множествам при том условии, что нельзя перемножать между собой векторы принадлежащие одному множеству:
.
6. Проверить полученные значения
на простоту. В случае положительного результата вывести их в виде
.
7. Построить четыре трехмерных сечения полученного множества точек:
или визуализировать результать каким-либо иным способом.
P.S. Конечно, совсем не обязательно строить и хранить все множества
для того чтобы организовать перебор попарных сочетаний принадлежащих им векторов. Видимо, будет экономнее строить каждый вектор скалярного произведения по его индексам, проверять получившееся число и переходить к следующему скалярному произведению.