PASCAL. Надо найти 101-й простой (делится только ** 1 и ** себя) палиндром - это число,...

0 голосов
53 просмотров

PASCAL. Надо найти 101-й простой (делится только на 1 и на себя) палиндром - это число, которое читается одинаково справа налево и слева направо. Надо использовать mod и div, чтобы выделить цифры числа. 1-й - это 2, 10-й - 191


Информатика (506 баллов) | 53 просмотров
0

Обязательно через mod и div? Проще через строку это сделать.

0

Это же школа, там не проще смотрят, а наоборот, чтобы жизнь не казалась медом.

Дан 1 ответ
0 голосов
Правильный ответ

PascalABC.NET 3.4.2, сборка 1826 от 07.10.2018

Внимание! Если программа не работает, обновите версию!

function IsPrime(n: integer): boolean;

begin

 if n < 4 then Result := True

 else

 begin

   var found := (n mod 2 = 0);

   var p := 3;

   while (not found) and (sqr(p) <= n) do</p>

   begin

     found := (n mod p = 0);

     p += 2

   end;

   Result := not found

 end

end;


function IsPalindrom(n: integer): boolean;

begin

 Result := True;

 if n > 10 then

 begin

   var (n1, i) := (n, -1);

   var a := new integer[9];

   while n1 > 0 do

   begin

     i += 1;

     a[i] := n1 mod 10;

     n1 := n1 div 10

   end;

   for var j := 0 to i div 2 do

   begin

     if a[j] <> a[i - j] then

     begin

       Result := False;

       break

     end

   end

 end

end;



begin

 var (i, k) := (3, 1);

 repeat

   if IsPrime(i) and IsPalindrom(i) then k += 1;

   i += 2

 until k >= 101;

 (i - 2).Println

end.


Результат: 94349

(654k баллов)