| 
| 
 | Вопрос # 2 483/ вопрос решён / | 
 |  Здравствуйте, эксперты!возник такой вопрос: нужно найти число, находящееся на отрезке [ a, b ], имеющее наибольшее количество делителей? Помогите ПОЖАЛУЙСТА!!!!
 
|  |   Вопрос задал: I{ () T (статус: Посетитель)Вопрос отправлен: 4 марта 2009, 18:09
 Состояние вопроса: решён, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, I{ () T!Делители искать просто. Где тот так
 
 function HowManyDiv(n:integer):integer;
var i,k:integer;
begin
  k := 0;
  for i := 2 to n div 2 do
    if n mod i = 0 then k:= k+1;
  result := k;
end;а теперь поиск максимума
 
 maxn =a;
maxk = HowManyDiv(maxn);
for i:=a+1 to b do
  begin
    k := HowManyDiv(i);
    if k>maxk then begin
      maxk := k;
      maxn := i;
    end;
  end;
//вывод maxn - собственно числа и maxk - его кол-ва делителейДумаю, что если надо будет сделать вывод самих делителей, то это будет не сложно:)
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 4 марта 2009, 19:30
 Оценка за ответ: 5
 Комментарий к оценке: ВЫРУЧИЛИ!!! ОГРОМНОЕ СПАСИБО!! действительно легко оказалось. а я вообще через цикл делал. и запутался вконец. ЕЩЕ РАЗ СПАСИБО! |  Ответ #2. Отвечает эксперт: min@y™ Цитата: нужно найти число, находящееся на отрезке [ a, b ], имеющее наибольшее количество делителей 
 Не всё так просто. На отрезке [ a, b ] чисел с максимальным кол-вом делителей может быть больше одного! Например, на отрезке [2, 100] их аж 5 штук: 60, 72, 84, 90, 96 (у всех кол-во делителей = 12). Я написал демо-программку, которая находит и выводит такие числа. Вот результат её работы, скопированный из консоли:
 
  --- Values with max count of dividers (total: 5) ---
 
Dividers of "60" (total: 12):
1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60
 
Dividers of "72" (total: 12):
1, 2, 3, 4, 6, 8, 9, 12, 18, 24, 36, 72
 
Dividers of "84" (total: 12):
1, 2, 3, 4, 6, 7, 12, 14, 21, 28, 42, 84
 
Dividers of "90" (total: 12):
1, 2, 3, 5, 6, 9, 10, 15, 18, 30, 45, 90
 
Dividers of "96" (total: 12):
1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 96 Саму программу прицепляю к ответу.
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 4 марта 2009, 20:23
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 21; последнее сообщение — 7 марта 2009, 11:34; участников в обсуждении: 4. Страницы: [1] [2] [Следующая »]  
|   | Вадим К (статус: Академик), 4 марта 2009, 18:49 [#1]:а умеем искать кол-во делителей и максимальное число в массиве? (по отдельности) Галочка "подтверждения прочтения" - вселенское зло. |  
|   | I{ () T (статус: Посетитель), 4 марта 2009, 19:04 [#2]:увы нет. такое к сожалению еще не прошел. у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | I{ () T (статус: Посетитель), 4 марта 2009, 20:16 [#3]:извините, я только учусь на delphi поэтому не могли бы разъяснить, как понять HowManyDiv, как его в программе писать, то бишь чем заменить? P.S.на счет циклов ошибка вышла. не разглядел сразу.
 у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | I{ () T (статус: Посетитель), 4 марта 2009, 20:29 [#4]:так...а можно ведь как то условие поставить чтобы выводило те числа, у которых количество делителей одинаково? у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | min@y™ (статус: Доктор наук), 4 марта 2009, 20:45 [#5]: Цитата: так...а можно ведь как то условие поставить чтобы выводило те числа, у которых количество делителей одинаково?  
 Их можно разделить и выводить по группам, типа:
 2 делителя ---> 2, 3, 5, 7, 11, 13, 17,...
 3 делителя ---> 4, 9, 25, 49,...
 4 делителя ---> 6, 8, 10, 14, 15,...
 ..........
 12 делителей ---> 60, 72, 84, 90, 96
 
 Но изначально задача поставлена на поиск числа (чисел) с максимальным кол-вом делителей.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | DNK (статус: Студент), 5 марта 2009, 17:02 [#6]:А делители любые? Или натуральными должны быть. "Digital Networked Knight" |  
|   | Вадим К (статус: Академик), 5 марта 2009, 17:10 [#7]:Для не натуральных (для не целых, если быть точным) данная задача лишена смысла. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | DNK (статус: Студент), 6 марта 2009, 17:11 [#8]:Прошу прощения: простых, конечно же. Экскурс в основы математики.
 Простое число - это число делящееся только на единицу или на само себя. Из курса математики за 6 класс помню, при задаче поиска делитлей числа искался именно ряд простых чисел. (4, 6, 8, 9 и тп - не простые числа, ответ min@y™)
 2Вадим К : Функция  HowManyDiv в любом случае выдаст n div 2-1, так как (i mod i) по определению нуль.
 Основная функция выдаст: "Неизвестный идентификатор 'kl'"(по наитию писали
  , подозреваю там должно быть вместо 'l' точка с запятой). Но и если учесть это, так как HowManyDiv будет равномерно будет возрастать, то основной цикл в любом случае выдаст "maxk = b div 2 -1" , а  "maxn = b" для нечётного "b" и "maxn=b-1" для чётного. 
 Я рассуждаю, так что жду полемики...
 "Digital Networked Knight" |  
|   | Вадим К (статус: Академик), 6 марта 2009, 17:35 [#9]:по поводу kl - да, l и точка с запятой рядом. На работе не всегда есть возможность в редакторе писать. if i mod i = 0  и здесь тоже. надо
 if n mod i = 0
 
 6 будет делителем 12, хотя 6 и не является простым. А то, о чем вы говорите называется "разложением на простые множители". А человеку надо "кол-во делителей".
 
 Полемики хотите? а не боитесь?
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | DNK (статус: Студент), 6 марта 2009, 18:23 [#10]:2 Вадим К: Так как по жизни везёт, всегда ищю приключений. 
 2 I{ () T: По поводу множителей жду твоих уточнений.
 "Digital Networked Knight" |  
|   | I{ () T (статус: Посетитель), 6 марта 2009, 18:31 [#11]:делители натуральные конечно! пожалуйста, если не сложно напиши мне эту программу(((( ГОРЮЮ!!!!! у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | DNK (статус: Студент), 6 марта 2009, 18:50 [#12]:В случае натуральных? Учтя замечания из мини-форума возьмите ответ Вадима. Правдо его цикл выведет только максимальный множитель и общее количество. Если вам нужны все берите значения всех "k". Програма min@y™ у меня не пошла. У него как-то слишком сложно, разбираюсь. "Digital Networked Knight" |  
|   | I{ () T (статус: Посетитель), 6 марта 2009, 19:12 [#13]:k := HowManyDiv(i); а как это понять? то есть как это отразить в delphi?
 у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | DNK (статус: Студент), 6 марта 2009, 19:32 [#14]:if k>maxk then begin maxk := k;
 maxn := i;
 writeln('Множитель: ' i);
 end;
 end;
 writeln('Количество: ', maxk);
 
 Можно так, я же не знаю к чему код прицеплен в итоге будет.
 "Digital Networked Knight" |  
|   | DNK (статус: Студент), 6 марта 2009, 19:35 [#15]:2Вадим Ка: Поправь свой ответ. Пока в рассылку не ушел. "Digital Networked Knight" |  
|   | I{ () T (статус: Посетитель), 6 марта 2009, 19:41 [#16]:uses SysUtils;
 var i,k,n,a,b,maxk,maxn:integer;
 begin
 readln(a,b);
 k :=0;
 for i := 2 to n div 2 do
 if i mod i = 0 then k:= k+1;
 write(k);
 for i:=a+1 to b do
 begin
 k := k+1;
 if k>maxk then begin
 maxk := k;
 maxn := i;
 writeln('Множитель', i);
 end;
 end;
 writeln('Количество: ', maxk);
 readln;readln;
 end.
 запускаю...ввожу отрезок...и "виснет" прога...
 у меня нет мании величия...Великие люди этим не страдают))).......лень порождает ненависть к жизни......
 |  
|   | DNK (статус: Студент), 6 марта 2009, 20:19 [#17]:Я уверен что она не заработоет. Во всяком сучае правильно. Попробуйте так.
 
 
 {$APPTYPE CONSOLE}
 
 uses
 SysUtils;
 var i,k,a,b,maxk,maxn:integer;
 
 function HowManyDiv(n:integer):integer;
 var i,k:integer;
 begin
 k := 0;
 for i := 2 to n div 2 do
 if n mod i = 0 then k:= k+1;
 result := k;
 end;
 
 begin
 readln(a,b);
 
 maxn :=a;
 maxk := HowManyDiv(maxn);
 for i:=a+1 to b do
 begin
 k := HowManyDiv(i);
 if k>maxk then begin
 maxk := k;
 maxn := i;
 end;
 end;
 writeln('Искомое число:', maxn);
 writeln('Количество множителей: ', maxk);
 readln;
 end.
 "Digital Networked Knight" |  
|   | min@y™ (статус: Доктор наук), 7 марта 2009, 09:54 [#18]: Цитата: Програма min@y™ у меня не пошла. У него как-то слишком сложно, разбираюсь.
 
 
 То есть как это? У меня работает, а у тебя нет? Там в архиве ЕХЕ-шник готовый был, ты его запускать пробовал?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | DNK (статус: Студент), 7 марта 2009, 11:08 [#19]:Кому ЕХЕ-шник интересен? 
 У тебя в 123 строке кусок кода потерян.
 "Digital Networked Knight" |  
|   | min@y™ (статус: Доктор наук), 7 марта 2009, 11:20 [#20]:Вообще странно получилось, действительно, открыл я щас архив, который пришпилил к ответу, а там нету последнео куска. А в исходнике - есть. Вот он: 
   // Вывожу ВСЕ числа с максимальным кол-вом делителей
  // вместе со списками этих самых делителей (для визуальной проверки правильности)
  WriteLn(#13#10' --- Values with max count of dividers (total: ', Length(MaxValues), ') ---'#13#10);
 
  for Index:= 0 to Length(MaxValues) - 1 do
    begin
       GetDividers(MaxValues[Index], Dividers);
       OutDividers(Dividers);
    end;
 
 
  ReadLn;
end.Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Страницы: [1] [2] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |