Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];

Вниз

Поиск делителей числа   Найти похожие ветки 

 
cr@nk ©   (2008-01-25 09:14) [0]

Условие задачи:
Составить программу для графического изображения делимости чисел от 1 до n. В каждой строке напечатать очередное число и столько символов «+»,
сколько делителей у этого числа:
1+
2++
3++
4+++


Собственно саму задачу решил, но препод настаивает на решении более оптимальным способом (без использования массивов, это я просто на всякий случай уточняю)

var
 i, j, x, k: Word;
begin
 Write("Vvedite cheslo: ");
 Readln(x);
 for I := 1 to x do
 begin
   k := 0;
   Write(i);
   for j := 1 to i do
   begin
     if i mod j = 0 then
       Write("+");
   end;
   Writeln;
 end;
 Readln
end.


Собственно надо эту часть for j := 1 to i do оптимизировать. Говорят, что надо использовать корень числа (например для 20 корень из 20), но я не могу понять как


 
Семеныч   (2008-01-25 09:25) [1]

Максимальный делитель числа не может быть больше корня из этого числа. Значит, незачем гнать цикл до самого числа, достаточно до корня из него.

for j := 1 to Trunc(Sqrt(i)) do ...


 
oldman ©   (2008-01-25 09:25) [2]


> Собственно надо эту часть for j := 1 to i do оптимизировать.
>  


for j:=1 to i/2
Число не может делиться на число, которое больше его половины без остатка
:)))


 
oldman ©   (2008-01-25 09:26) [3]


> Семеныч   (25.01.08 09:25) [1]
> Максимальный делитель числа не может быть больше корня из
> этого числа.


У 10, например, есть делитель 5


 
cr@nk ©   (2008-01-25 09:29) [4]

Спасибо. Что-то я не догадался сразу про это свойство


> for j:=1 to i/2

Малость ошибочная запись... число должно быть целочисленным ;)


 
Семеныч   (2008-01-25 09:31) [5]

> oldman ©   (25.01.08 09:26) [3]

... который должен быть найден одновременно с делителем 2.


 
Sergey13 ©   (2008-01-25 09:46) [6]

Да иначинать цикл можно с 2, а не с 1. 8-)


 
oldman ©   (2008-01-25 09:46) [7]

Значит, оптимизация такая:

for j := 1 to Trunc(Sqrt(i)) do
...
    Write("++");
...

Только обдумать:
Если корень круглый, write("+") для корня...
Например 9 делится на 3, остаток 3


 
oldman ©   (2008-01-25 09:47) [8]


> Sergey13 ©   (25.01.08 09:46) [6]
> Да иначинать цикл можно с 2, а не с 1. 8-)


Нет.
Для 1 тоже надо  Write("++"), поскольку число делится на 1 и на самое себя


 
Sergey13 ©   (2008-01-25 09:51) [9]

> [8] oldman ©   (25.01.08 09:47)
> Для 1 тоже надо  Write("++"), поскольку число делится на
> 1 и на самое себя

Я имел в виду, что это можно и не анализировать IF-ом. Просто рисовать плюсик.


 
oldman ©   (2008-01-25 10:05) [10]

var
i, j, x, k: Word;
begin
Write("Vvedite cheslo: ");
Readln(x);
for I := 1 to x do
begin
  k := 0; А вот это зачем???
  Write(i);
  for j := 1 to Trunc(Sqrt(i)) do
  begin
    if i mod j = 0 then
      Write("+");
      if j<Trunc(Sqrt(i)) Write("+");
  end;
  Writeln;
end;
Readln
end.


 
Anatoly Podgoretsky ©   (2008-01-25 11:04) [11]


> Просто рисовать плюсик.

Два плюса, если число больше 1



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.176 c
1-1194779709
mufan
2007-11-11 14:15
2008.02.17
TreeView.Items.Clear не работает???


3-1191490877
Ega23
2007-10-04 13:41
2008.02.17
TDataLink - распознать Insert и Edit


1-1194786224
9899100
2007-11-11 16:03
2008.02.17
обработка строк текстового файла


6-1180443920
Chaser
2007-05-29 17:05
2008.02.17
Путь к папке "Program Files" на удаленном компьютере


15-1200497580
ProgRAMmer Dimonych
2008-01-16 18:33
2008.02.17
Я чего-то недопёр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский