Завдання № 14. Знайти найбільший нетривіальний дільник натурального числа » Pascal - основи програмування

Основи програмування на мові Pascal

 

Спонсори

Завдання № 14. Знайти найбільший нетривіальний дільник натурального числа

Завдання № 14. Знайти найбільший нетривіальний дільник натурального числа
Формулювання. Дано натуральне число. Знайти його найбільший нетривіальний дільник або вивести одиницю, якщо такого немає.
Примітка 1: дільником натурального числа a називається натуральне число b, на яке a ділиться без залишку. Тобто вираз «b - дільник a» означає: a / b = k, причому k - нату-рального число.
Примітка 2: нетривіальним дільником називається дільник, який відрізняється від 1 і від са-мого числа (так як на одиницю і саме на себе ділиться будь-яке натуральне число).
Рішення. Нехай введення з клавіатури здійснюється в змінну n. Спробуємо вирішити за-дачу перебором чисел. Для цього візьмемо число на одиницю меншу n і перевіримо, чи ділиться n на нього. Якщо так, то виводимо результат і виходимо з циклу за допомогою оператора break. Якщо ні, то знову зменшуємо число на 1 і продовжуємо перевірку. Якщо у числа немає нетривіальних де-літелей, то на якомусь кроці перевірка дійде до одиниці, на яку число гарантовано по-ділиться, після чого буде виданий відповідний умові відповідь.
    Хоча, якщо говорити точніше, слід було б почати перевірку з числа, рівного n div 2 (щоб відкинути дробову частину при діленні, якщо n непарне), так як жодне натуральне число не має дільників більших, ніж половина це цього числа. В іншому випадку частка від ділення має бути натуральним числом між 1 і 2, якого просто не існує.
    Дане завдання також вирішується через for, але через іншу його різновид, і тепер рахунок-чик буде спадати від n div 2 до 1. Для цього do заміниться на downto, при позиції початкового та кінцевого значень залишаються тими ж.
Алгоритм природною мовою:
1) Введення n;
2) Запуск циклу, при якому i змінюється від n div 2 до 1. У циклі:
     1. Якщо n ділиться на i (тобто, залишок від ділення числа n на i дорівнює 0), то виводимо i на екран і виходимо з циклу за допомогою break.

Код:


  1. program GreatestDiv;
  2. var
  3. i, n: word;
  4. begin
  5. readln(n);
  6. for i := n div 2 downto 1 do begin
  7. if n mod i = 0 then begin
  8. writeln(i);
  9. break
  10. end
  11. end
  12. end.

До речі, у оператора розгалуження if в циклі відсутня else-блок. Такий умовний оператор називається оператором розгалуження з однією гілкою.

14.rar [501 b] (cкачувань: 8)

скачать dle 10.4фильмы бесплатно Наступна сторінка » Завдання № 15. Знайти найменший нетрив... Попередня сторінка » Завдання № 13. Вивести на екран всі нат...