в двумерном массиве N*N найти простые числа,и если в строках находятся более двух простых чисел то обнулить эти строки.

1

Ответы и объяснения

2013-11-17T16:43:49+00:00
Вот жутко неэффективное решение, для нормального надо писать решето эратосфена, можно нагуглить, если нужна эффективность

function isPrime (a : integer) : boolean;
var
  i, lim : integer;
begin
  if n < 4 then begin
  if n = 1 then isPrime := false else isPrime := true; 
exit;
 end;
  lim := trunc (sqrt (a));
  for i := 2 to lim do
    if a mod i = 0 then
    begin
      isPrime := false;
      exit;
    end;
isPrime := true;
end;

var
  a : array of array of integer;
  b : array of integer;
  i, j, n : integer;

begin
  read (n);
  setlength (a, n, n);
  setlength (b, n);
  for i := 0 to n - 1 do
    for j := 0 to n - 1 do
      read (a[i, j]);
  for i := 0 to n - 1 do
  begin
   b[i] := 0;
    for j := 0 to n - 1 do
      if isPrime(a[i, j]) then inc (b[i]);
  end;
  for i := 0 to n - 1 do
begin
  if b[i] <= 2 then
    for j := 0 to n - 1 do
      write (a[i, j], ' ')
  else 
     for j := 0 to n - 1 do write ('0 ');
  writeln;
end;
end.