Показать сообщение отдельно
  #3  
Старый 06.05.2014, 22:59
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Sweet_blood
Определите наибольшее простое число, меньшее 10000.
Наверное самый быстрый способ - с помощью Решета Эратосфена, но он требует массива соответствующего размера:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
  max = 10000;
var
  nums: array [2..max] of Boolean;
  i, j: Integer;
begin
  for i := 2 to max do
    nums[i] := True;

  for i := 2 to max do
  begin
    if nums[i] then
    begin
      j := i + i;
      while j <= max do
      begin
        nums[j] := False;
        Inc(j, i);
      end;
    end;
  end;

  for i := max downto 2 do
  begin
    if nums[i] then
    begin
      ShowMessageFmt('Число %d является наибольшим простым числом которое не превышает %d', [i, max]);
      Break;
    end;
  end;
end;
Простым перебором - более медленный способ, зато не требует дополнительной памяти:
Код:
procedure TForm1.Button2Click(Sender: TObject);
const
  max = 10000;
var
  i, j: Integer;
  IsPrime: Boolean;
begin
  for i := max downto 3 do
  begin
    IsPrime := True;
    for j := 2 to Trunc(Sqrt(i)) do
    begin
      if (i mod j) = 0 then
      begin
        IsPrime := False;
        Break;
      end;
    end;

    if IsPrime then
    begin
      ShowMessageFmt('Число %d является наибольшим простым числом которое не превышает %d', [i, max]);
      Break;
    end;
  end;
end;
Правда этот способ можно слегка оптимизировать исключая чётные числа, но пусть это будет домашним заданием
Ответить с цитированием