Главная страница
    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.045 c
1-1194842175
San1712
2007-11-12 07:36
2008.02.17
Как ввести символ в Edit прграммно через Perform?


15-1200404670
Dmitry S
2008-01-15 16:44
2008.02.17
Авторизация на контроллере домена через PHP


2-1201043279
Тимоха
2008-01-23 02:07
2008.02.17
движение формы


2-1201100484
Тоник
2008-01-23 18:01
2008.02.17
stringtowidechar


2-1200995882
Stasxxx
2008-01-22 12:58
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский