|
0 / 0 / 0
Регистрация: 16.08.2020
Сообщений: 2
|
|
Сортировка массива по возрастанию расстояния до ближайшего16.08.2020, 01:40. Показов 2008. Ответов 5
Метки нет (Все метки)
Дан массив натуральных чисел. Отсортируйте элементы массива по возрастанию расстояния до ближайшего простого числа. Выведете на экран отсортированные подходящие числа, расстояния до ближайших простых чисел и эти простые числа
Подскажите, пожалуйста, как строить программу для такого типа задач? так и не получилось найти ничего похожего. (Может за одно и для этого всего тоже что-нибудь подскажете: по возрастанию расстояния до ближайшего числа Фибоначчи; по возрастанию расстояния до ближайшего числа, являющегося степенью двойки)
0
|
|
| 16.08.2020, 01:40 | |
|
Ответы с готовыми решениями:
5
Сортировка массива: сначала положительные по возрастанию, потом отрицательные по возрастанию
Сортировка массива по возрастанию суммы делителей элементов этого массива |
|
Модератор
|
|
| 16.08.2020, 10:01 | |
|
Раз в итоге требуется вывести:
- отсортированные подходящие числа, - расстояния до ближайших простых чисел - эти простые числа И нет ограничений на память. То я бы к тому массиву создал ещё два - массив с ближайшими простыми числами (числами Фибоначчи, степенями 2) и массив расстояний. Потом сортировал бы массив расстояний, при этом во время обмена синхронно бы обменивал соответствующие элементы всех трёх массивов.
0
|
|
|
Почетный модератор
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
|
||
| 16.08.2020, 10:10 | ||
|
0
|
||
|
Модератор
10448 / 5739 / 3407
Регистрация: 17.08.2012
Сообщений: 17,458
|
||||||||||||||||||||||||||
| 17.08.2020, 03:21 | ||||||||||||||||||||||||||
Сообщение было отмечено ФедосеевПавел как решение
Решение
Буду считать, что задание учебное, и поэтому длинная арифметика не используется. Буду считать, что составители задач, испорченные реформой образования, традиционно путают сортировки по возрастанию и неубыванию.
Последовательности степеней числа 2, Фибоначчи и простых чисел возрастающие. Поэтому, чтобы не искать ближайшие для каждого элемента массива, разумно будет исходный массив предварительно отсортировать по неубыванию. Степени двойки и числа Фибоначчи. Максимальное целое число, представимое типом integer, для Pascal ABC равно 231-1=2147483647. И оно ближе всего к 231=2147483648. Но это число уже не влезает в integer. Получается, что нужно либо ограничить диапазон чисел в массиве, либо использовать более ёмкий тип данных. Примерно то же самое и с числами Фибоначчи: F(46)=1836311903, F(47)=2971215073. Конечно, 2147483647 ближе к F(46), но с F(47) тоже придётся сравнивать, поскольку гарантированно точное расстояние есть минимальное расстояние до одного из ближайших чисел Фибоначчи, а априори нам не известно, до какого именно числа Фибоначчи будет минимальное расстояние от 2147483647. Можно использовать тип real. Предвосхищая возражения, что будут какие-то там ошибки при использовании вещественных чисел. Так как любое число типа integer помещается в мантиссу типа real полностью, то числа типа integer в машинном формате будут представлены точно (без усечения или округления). Мало того, сравнение чисел integer, преобразованных в real, даёт верный результат. Для степеней двойки:
Для последовательности простых чисел всё не так просто. Если на интервале от 1 до 2147483647 степеней двойки требуется вычислить максимум 33, чисел Фибоначчи максимум 47, то простых чисел нужно вычислить более 100000000, и вычисление последовательности простых чисел гораздо сложнее и намного медленнее, чем последовательностей степеней двойки или чисел Фибоначчи. Радует только одно: 2147483647 является простым числом (если быть точным, это восьмое простое число Мерсенна), и костыль с числами типа real не нужен. Для отбора кандидатов в последовательность простых чисел буду использовать решето, основанное на колесе простых чисел (wheel sieving) с количеством спиц 2*3*5=30, это позволяет исключить из рассмотрения примерно 73% чисел и не требует большого объёма памяти. Для проверки отобранных чисел на простоту буду использовать то же самое колесо. Алгоритм взят отсюда: Алгоритм, который устанавливает – является ли число простым Ссылка на Википедию: Wikipedia - Wheel factorization Программу придётся существенно переработать. Изменения коснутся объявления переменных и вычисления следующего числа (это строки 40..44 в программе для степеней двойки). Получилось так:
Программу можно упростить (и замедлить), применив более простой алгоритм нахождения следующего простого числа. Программу можно ускорить (и существенно усложнить), если применить для генерации следующего простого числа какое-нибудь другое решето. Не знаю, правда, какое. Аткина, наверное.
1
|
||||||||||||||||||||||||||
|
Модератор
10448 / 5739 / 3407
Регистрация: 17.08.2012
Сообщений: 17,458
|
|
| 20.08.2020, 21:02 | |
|
Да, действительно. Убрать забыл. Спасибо.
0
|
|
| 20.08.2020, 21:02 | |
|
Помогаю со студенческими работами здесь
6
Сортировка массива по возрастанию
Сортировка массива по возрастанию
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|