Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 8

Уменьшить перебор (поиск числа с наибольшим числом делителей)

08.12.2016, 16:57. Показов 2313. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа для нахождения числа (в промежутке от 1 до m включительно) с наибольшим количеством делителей. В конце выводит само число и количество его делителей.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
var
    m      : longint;
    max    : longint;
    count  : longint;
    number : longint;
    i      : longint;
 
function getDiv(number: longint): longint;              // найти количество делителей
var
    count: longint;
    i: longint;
 
begin
 
    count := 0;
 
    for i := 1 to number div 2 do
 
        if number mod i = 0 then count := count + 1;
 
    getDiv := count + 1;
 
end;
 
begin
 
    read(m);
    max := 0;
 
    for i := 1 to m do
    begin
 
        count := getDiv(i);
 
        if max < count then
        begin
 
            max := count;
            number := i;
 
        end;
 
    end;
 
    writeln(number);
    writeln(max);
 
end.
Здесь практически полный перебор, необходимо уменьшить его количество, чтобы увеличить скорость выполнения программы. Система проверки на 18 примерах из 50 выдает превышение ограничения по времени. Конкретные примеры и ограничения по времени неизвестны. Ограничение для m: 1 <= m <= 100 000. Помогите, пожалуйста, оптимизировать.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2016, 16:57
Ответы с готовыми решениями:

Поиск числа с наибольшим количеством делителей
Задача 2. Составить программу поиска на интервале числа, имеющего наибольшее количество делителей. Если таких чисел несколько, то...

Найти в диапазоне от M до N число с наибольшим количеством делителей. Функция: количество делителей заданного числа
Найти в диапазоне от M до N число с наибольшим количеством делителей. Функция: количество делителей заданного числа ...

Определить натуральное число не больше заданного n с наибольшим числом простых делителей
Вот наткнулся на интересную задачку,ну,по карйней мере меня заинтересовала:good:,ну так вот : 1. Определить натурально число не больше...

5
CAPITAL OF ROCK!
 Аватар для JokeR.BY
1281 / 708 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
08.12.2016, 17:27
самая очевидная оптимизация - делать цикл до квадратного корня оного числа.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function DivCount(const x: LongInt): Word;
var
    Result: Word; //удалить строку при ошибке повторного идентификатора
    i: LongInt;
begin
    Result := 2;
    for i := 2 to Trunc(Sqrt(x)) do
        if (x mod i = 0)
        then
            Inc(Result);
    DivCount := Result;
end;
var
    i, m, maxn: LongInt;
    max, current: Word;
begin
    Write('m='); ReadLn(m);
    max := 0;
    for i := 1 to m do
    begin
        current := DivCount(i);
        if (current > max)
        then
        begin
            max := current;
            maxn := i;
        end;
    end;
    if (max > 0)
    then
    begin
        WriteLn('count=', max, ', number=', maxn);
    end
    else
        WriteLn('ERROR!');
end.
1
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 8
08.12.2016, 18:10  [ТС]
Если искать делители только до квадратного корня, то часть из них теряются. Например, квадратный корень числа 12, округленный в большую сторону = 4, получается, что мы теряем один делитель (6).
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
08.12.2016, 18:39
Лучший ответ Сообщение было отмечено CasualNoob как решение

Решение

Немного не так.
Pascal
1
2
3
4
5
6
7
8
9
function KolDel(n:integer):integer;
var i,k:integer;
begin
k:=2; //1 и само число
for i:=2 to trunc(sqrt(n)) do //остальные делители
if n mod i=0 then inc(k,2);
if frac(sqrt(n))=0 then dec(k);//если число полный квадрат, то минус 1
result:=k;
end;
1
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 8
09.12.2016, 00:01  [ТС]
Всем спасибо. Теперь проходят все тесты.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
10.12.2016, 00:19
Здесь подобная задачка Найти число от 1 до n с максимальной суммой делителей
И описан иной подход к её решению. Время выполнения резко сокращается, но растёт расход памяти.

Число с максимальным количеством делителей можно искать не отдельным циклом, а в наружном цикле. Это ещё сократит время.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.12.2016, 00:19
Помогаю со студенческими работами здесь

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

Вывод числа с наибольшим количеством делителей
Даны три числа. С помощью функции, определяющей количество делителей натурального числа вывести на экран число с наибольшим количеством...

Определить разность между наибольшим числом и наименьшим числом последовательности
вот задание и сама программа,в ней ошибка ,но незнаю какая. Помогите пожалуйста! Даны вещественные числа A1, A2, A3, ... . Признак...

Определить разность между наибольшим числом и наименьшим числом последовательности
Даны натуральные числа A1, A2, A3..... Признак конца последовательности 11. Определить разность между наибольшим числом и наименьшим числом...

Получить все целые числа из интервала от А до В, у которого сумма делителей является четным числом
1.Получить все целые числа из интервала от А до В, у которого сумма делителей является четным числом. Используйте процедуру или функцию.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru