Сиракузская последовательность

В данной статье описывается шифратор основной частью которого является сиракузский ряд чисел

Автор работы: Омаров Алик Адамович ученик 10"А" класса Лицея №128. Научный руководитель: Зеньчук Галина Владимировна, учитель математики высшей категории.


Более 70 лет назад Лотаром Коллатцем сформулирована так называемая проблема «3n+1», над которой бились математики лучших университетов мира, потрачены миллионы часов машинного времени, но никакие усилия к окончательному решению не привели.

Условие: рассмотрим какое-нибудь натуральное число. Если число чётное, разделим его на 2, а если нечётное – умножим на 3 и прибавим 1. Затем будем выполнять эти операции (шаги) до тех пор, пока не придем к единице. Последовательность, образованная числами всех шагов называется сиракузской. Например, вот что будет происходить, если начать с пятёрки: 5 -> 5 * 3 + 1 = 16 -> 16 / 2 = 8 -> 8 / 2 = 4 -> 4 / 2 = 2 -> 2 / 2 = 1 (5,16,8,4,2,1 - сиракузский ряд для числа 5)

Отступление "Доказательство гипотезы"

Условие что любое число придет к единице и, что любое число уменьшится эквивалентны. В результате работы было установлено что определенные группы чисел уменьшаются за одинаковое количество шагов, описав эти комбинации диофантовым уравнением, решением которого и есть все числа на бесконечном множестве (арифметические прогрессии) которые уменьшаются за данную комбинацию. Высчитав общую плотность решений более 12 тысяч диофантовых уравнений было установлено, что 97,75% натуральных чисел сходятся к единице.

Шифратор и дешифратор написаны на языке с++.

Программный код шифратора:

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int A[1000][2];

int n;

void cerakuz(){

unsigned int a,b,d,e,r,j;

b=e=r=0;

srand(time(NULL));

a = 1000000 + rand() % 10000000;

cout <

d=a;

while(a!=1){if (a%2==0){

a=a/2;A[r][0]=a;r++;} else{

a=a*3+1;A[r][0]=a;r++;}}

n = 0;

for (char i = 'а'; i <= 'я'; i++){

A[n][1] = i;

n++;

}

for(int i ='0'; i<='9';i++){

A[n][1]=i;

n++;

}

A[n+1][1] = ' ';

A[n+2][1] = '.';

A[n+3][1] = ',';

A[n+4][1] = '!';

A[n+5][1] = '?';

}

int main() {

freopen("input.txt", "r", stdin);

freopen("output.txt", "w", stdout);

setlocale (LC_ALL, "Russian");

string S;

getline(cin,S);

int y = S.length();

cout <

cerakuz();

for(int i = 0; i < y; i++){

n = 0;

while((int)S[i]!=A[n][1]){n++;

}

cout <

}

return 0;

}

Программа случайным образом выбирает число от 1 до 10 миллионов и производит с ним необходимые операции для получения сиракузской последовательности затем каждая буква, цифра и основные знаки препинания приравниваются к соответствующим числам из сиракузского ряда. Затем при вводе текста, требуемого к зашифровке вместо каждой буквы в словах выводятся числа из полученного ряда.

Пример шифрования:

После ввода текста в файл input и запуска шифратора получаем следующую комбинацию:

Код дешифратора:

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int A[1000][3];

int n;

unsigned int a;

void cerakuz(unsigned int a){

unsigned int b,d,e,r;

b=e=r=0;

d=a;

while(a!=1){if (a%2==0){

a=a/2;A[r][0]=a;r++;} else{

a=a*3+1;A[r][0]=a;r++;}}

n = 0;

for (char i = 'а'; i <= 'я'; i++){

A[n][1] = i;

n++;

}

for(int i ='0'; i<='9';i++){

A[n][1]=i;

n++;

}

A[n+1][1] = ' ';

A[n+2][1] = '.';

A[n+3][1] = ',';

A[n+4][1] = '!';

A[n+5][1] = '?';

}

int main() {

freopen("input.txt", "r", stdin);

freopen("output.txt", "w", stdout);

setlocale (LC_ALL, "Russian");

int y;

cin >> y;

cin >>a;

for(int i = 0; i< y; i++){

cin >> A[i][2];}

cerakuz(a);

for(int i = 0; i

while((int)A[i][2]!=A[n][0]){n++;

}

cout << (char)A[n][1];

}

return 0;

}

Если полученную зашифрованную комбинацию поместить в файл input и запустить дешифратор, то получим исходный текст.

100
Объявления

Я – Радиоинженер

Молодежный проектный центр радиоэлектронных систем

Партнеры:

ИнФО УрФУ – Генеральный партнер в проведении проектной практики

Роботология – Российское оборудование для программирования и конструирования роботов

Уральский клуб нового образования – общественная организация, которая разрабатывает и реализует социально-образовательные проекты

Архив событий:

проектный практикум 3 курса

проектный практикум 4 курса

Молодежный космический форум – 2019 (VI Семихатовские чтения)О Форуме-2019 Новое

Школа наставников - 2018 “Как создать проект в новом технологическом укладе” Актуальное

Проектная практика для студентов Института фундаментального образования УрФУСобытие

Молодежный космический форум - 2017 (Четвертые Семихатовские чтения)Конкурс

Выбор темы работы для участия в IV Семихатовских чтенияхО Форуме-2017

Подписка на новости
Контакты

Адрес: г. Екатеринбург, ул. Мамина-Сибиряка 145, к. 1119 (на карте)

Тел.: +7 (343) 355-93-88

info@cosmoport.club