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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2014, 13:14   #1
Евгения Иванова
Новичок
Джуниор
 
Регистрация: 17.12.2014
Сообщений: 1
Вопрос Составьте программу в Pascal ABC.

Составьте программу, определяющую, можно ли представить данное натуральное число М в виде произведения двух простых сомножителей.
Евгения Иванова вне форума Ответить с цитированием
Старый 17.12.2014, 13:56   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Евгения, а что не получается? Разложить число на множители не получается? Или проверить число - простое оно или нет?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.12.2014, 12:11   #3
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Проверка числа (простое или нет):
Код:
function simple(n:integer):boolean;
var i,c:integer;
begin
   Result:=false;
   If n<2 then
      Exit;
   c:=0;
   For i:=1 to n do
      If n mod i=0 then
         c:=c+1;
   Result:=c=2;
end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 19.12.2014, 18:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

newerow1989, функция, конечно, работает правильно,
но КРАЙНЕ неоптимально.

1-е. Нет смысла проверять делимость на 1. Поэтому цикл от единицы не очень оправдан.

2-е. Делители у числа N, (если не брать само число N) могут быть только до корень квадратный из N (включительно). У Вас же перебираются все числа.
смотрите, если взять N (хотя бы) 10000, то все его ВОЗМОЖНЫЕ делители от 2-х до 100. Ваш код будет в цикле перебирать ВСЕ числа от 100 до 10000... это примерно 9900 лишних операций деления и сравнения... (если брать N побольше, то цикл лишних операций будет расти квадратично

3-е. Если мы уже нашли, что у числа БОЛЬШЕ двух делителей, зачем нам перебирать ВСЕ ОСТАЛЬНЫЕ?! Если бы стояла задача подсчитать сколько всего делителей у числа, то да, с учетом замечаний 1) и 2) мы бы считали счётчик.
А Ваш код, если ему ввести число 2000000 будет 2000000 раз делить на i и считать, сколько же делителей, хотя, очевидно, что делителей у данного числа больше двух и, следовательно, число НЕ ПРОСТОЕ (а составное).

p.s. на форуме полно функций, которые проверяют число на простоту и лишены перечисленных мною недостатков!
Показать?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.12.2014, 06:13   #5
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Исправил:
Код:
function simple(n:integer):boolean;
var i:integer;
begin
   Result:=false;
   If n<2 then
      Exit;
   For i:=2 to Trunc(Sqrt(n)) do
      If n mod i=0 then
         Exit;
   Result:=true;
end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 20.12.2014 в 06:32.
newerow1989 вне форума Ответить с цитированием
Старый 21.12.2014, 10:28   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Исправил:
вот, теперь совсем другое дело! Годится!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составьте программу подсчета числа положительных элементов одномерного массива А(N), встречающихся в этом массиве (Pascal ABC) Кутяшка Помощь студентам 6 28.05.2014 18:43
Построить алгоритм в виде блок-схем и написать соответствующую программу на языке Pascal / Pascal ABC IgorMyakota Паскаль, Turbo Pascal, PascalABC.NET 9 06.03.2014 07:32
(Turbo Pascal)Обработка текста и числа!Составьте программу,определяющую.. Swetic Помощь студентам 2 21.01.2013 08:27
Дописать программу на Pascal ABC daniil-640 Помощь студентам 1 08.06.2012 19:54
Написать программу на Pascal ABC daniil-640 Помощь студентам 0 31.05.2012 13:50