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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2009, 21:00   #1
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость Проверка на простые числа

Задан диапазон целых чисел (пользователь вводит с клавы n1 и n2)
и нужно проверить являеться ли число простым(делиться само только на себя и на 1 )...
Мой код
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

  var
  n1,n2:byte;
  i,j:integer;
begin
write('n1= ');

readln(n1);

write('n2= ');
readln(n2);


for I := n1 to n2  do
  begin
     j:=1;
          for j := 2 to n2-1  do
                    begin                           // проблема в том что бы не использовать 3-й цикл для увеличения j в самих условных операторах...
               if (i mod j) = 0 then
                   break;


               if (i mod j) <> 0 then
                begin

                    write(i,' ');
                    break;
                  end;

                    end;

  end;



  readln;
end.
Тойсть на данный момент

Код:
10\2 брейк внутр цикла
11\2 выводим 11
12\2 брейк внутр цикла
13\2 выводим 13
..............
15\2 оно записывает
А нужно:
Код:
10\2 брейк внутр цикла
11\2 записываем
12\2 брейк внутр цикла
11\2 записываем
................
15\2 => продвигаемся, увеличивая j пока не будет целечисленое деление(например 15\3)
15\3 брейк внутр цикла
Lemo вне форума Ответить с цитированием
Старый 29.09.2009, 21:38   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Что-то у Вас, мягко говоря, странный алгоритм. Вот
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var n1,n2:byte;
    i,j:integer;
    simple: boolean;

begin
write('n1= ');
readln(n1);
write('n2= ');
readln(n2);

for i := n1 to n2  do
  begin
  if i <> 1 then simple := true;
  for j := 2 to i-1  do
    if (i mod j) = 0 then
      begin
      simple := false;
      break;
      end;
  if simple then write(i,' ');
  end;
  readln;
end.
Кстати, в целях ускорения можно использовать тот факт, что все простые числа > 3 имеют вид 6k+1 или 6k-1. Плюс проверять можно не до i-1, а до sqrt(i)
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
простые числа.окружность. Verochka Помощь студентам 15 31.12.2008 08:22
Простые числа Verochka Помощь студентам 14 02.12.2008 20:30
Простые числа werser Помощь студентам 8 18.06.2008 07:24
простые числа Акашаев Нурлан Паскаль, Turbo Pascal, PascalABC.NET 2 05.12.2007 12:23