// PascalABC.NET 3.3, сборка 1627 от 27.01.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 begin found:=(n mod p=0); p+=2 end; Result:=not found end end;
begin var a:=ArrRandom(56,1000,9999); a.Println; Writeln('Сумма простых равна ',a.Where(t->IsPrime(t)).Sum) end.
Имеем строку из единиц длиной 99 символов. Пока в строке имеется подстрока 111, выполняется цикл. Подстрока 111 заменяется на 2 и это уменьшает длину строки на 2 символа. Эта операция повторяется, пока не появится подстрока 222, что достигается за три прохода по циклу. При этом длина строки в целом сократится на 6. Подстрока 222 заменяется на 1, после чего получается строка исходного вида (из одних единиц), но с длиной на 8 меньше исходной. Этот процесс будет повторятся и длина строки последовательно будет такой: 99, 91, 83, ... 11. Можно предположить, что строка окончательно примет длину 99 mod 8 = 3, но все немного сложнее. Дело в том, что строка длиной 11, т.е. 1111111111 будет последовательно преобразована к 211111111 2211111 22211 и после этого цикл закончится, поскольку подстроки 111 больше найдено не будет.
// Внимание! Если программа не работает, обновите версию!
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
begin found:=(n mod p=0); p+=2 end;
Result:=not found
end
end;
begin
var a:=ArrRandom(56,1000,9999); a.Println;
Writeln('Сумма простых равна ',a.Where(t->IsPrime(t)).Sum)
end.
Пример
9439 5453 9513 6006 9543 9665 1503 5172 1466 6841 1537 5088 2768 7795 6462 7780 6567 1956 5669 6214 3307 7069 2462 8404 3407 7707 6307 1121 8854 7039 9663 6162 8362 7376 5578 8784 4688 2745 1361 6457 6234 2320 8270 9441 2244 8934 4081 8649 9684 4137 8865 1179 7488 9410 5828 3369
Сумма простых равна 44132
Пока в строке имеется подстрока 111, выполняется цикл.
Подстрока 111 заменяется на 2 и это уменьшает длину строки на 2 символа.
Эта операция повторяется, пока не появится подстрока 222, что достигается за три прохода по циклу. При этом длина строки в целом сократится на 6.
Подстрока 222 заменяется на 1, после чего получается строка исходного вида (из одних единиц), но с длиной на 8 меньше исходной.
Этот процесс будет повторятся и длина строки последовательно будет такой:
99, 91, 83, ... 11. Можно предположить, что строка окончательно примет длину 99 mod 8 = 3, но все немного сложнее.
Дело в том, что строка длиной 11, т.е. 1111111111 будет последовательно преобразована к
211111111
2211111
22211
и после этого цикл закончится, поскольку подстроки 111 больше найдено не будет.
ответ: 22211