Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2016, 10:04   #11
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Корень зачем? А если число 96?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 14.01.2016, 10:06   #12
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Для 100 ведь 20 25 50 делители
Изображения
Тип файла: jpg ATT.jpg (86.3 Кб, 72 просмотров)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 14.01.2016, 10:15   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Корень зачем?
Что бы цикл короче был. Корень меньше деленного на 2 и на много. Только удваивать приращение счетчика, за одним исключением
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.01.2016, 16:18   #14
Chaffee
Новичок
Джуниор
 
Регистрация: 13.01.2016
Сообщений: 4
По умолчанию

Я тут по-короче программу сделал.
Код:
var a,b,c: word;
begin
c:=0;
readln(a);
for b:=1 to a do begin
  if a mod b=0 then inc(c);
  end;
  writeln(c);
  end.
Chaffee вне форума Ответить с цитированием
Старый 14.01.2016, 16:31   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну если стояла задача как можно меньше букофф тоды да. Можно было просто для 97 в одну строку без всякого ввода writeln(2);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.01.2016, 16:34   #16
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

как короче если для а=100 она сделает 100 итераций?
Изображения
Тип файла: jpg ATT.jpg (73.5 Кб, 143 просмотров)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 14.01.2016, 17:44   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
 j := trunc(sqrt(z))+1;
  if j*j>z then dec(j)
я тут немножко проверил.
получается, что для любых натуральных z всегда j*j меньше или равно z
так можно быть, просто:
Код:
 j := trunc(sqrt(z));
или я чего-то важное упускаю из виду?!

Aleksandr H., а в таком случае сколько будет итераций?
Код:
 j := trunc(sqrt(z));
  m := 0;
  for i:=1 to j do if z mod i = 0 then inc(m,2);
  if (z mod j = 0) and (j*j = z) then dec(m);

Последний раз редактировалось Serge_Bliznykov; 14.01.2016 в 17:47.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.01.2016, 17:56   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
j := trunc(sqrt(z));
Может не прокатить, например вернув корень из 100: 9.999999... 100 к примеру, не проверял что там возвращается. Выше предлагал, что бы исключить такую ситуацию и убрать избыточность
Код:
j := trunc(sqrt(z))+1;
if j*j>z then dec(j);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.01.2016, 17:58   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я понял.
но я проверил, вроде бы косяков с trunc(z) нет...
кстати, можно и без корня обойтись:
Код:
  m := 0;
  i:=1;
  while i*i<z do begin
     if z mod i = 0 then inc(m,2);
     inc(i);
  end;
  if (i*i = z) then inc(m);

Последний раз редактировалось Serge_Bliznykov; 14.01.2016 в 18:01.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.01.2016, 18:07   #20
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Aleksandr H., а в таком случае сколько будет итераций?
Код:
 j := trunc(sqrt(z));
  m := 0;
  for i:=1 to j do if z mod i = 0 then inc(m,2);
  if (z mod j = 0) and (j*j = z) then dec(m);
для 100 - 10 и в номинации самый быстрый алгоритм, в ожесточенной борьбе, побеждает Serge_Bliznykov
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать сколько сводных таблиц и сколько срезов на рабочем листе? RISagitov Microsoft Office Excel 0 31.10.2015 19:30
Определить, больше ли сумма простых делителей числа М, произведения составных делителей числа N. Radmir. v Помощь студентам 5 10.11.2014 22:23
Сколько стоит такая программка? И сколько по времени её сделать? Палыч I Фриланс 8 10.09.2010 16:23
сколько платит каждый жилец за электроэнергию и сколько они платят вместе. известно - стоимость 1кВт/час Pops Microsoft Office Excel 9 25.01.2009 15:28
Помогите оценить, сколько может стоить проект. Его покупают - сколько взять? grenles Свободное общение 4 16.07.2008 09:38