Выигрывает 2 игрок. Для доказательства стоит рассмотреть дерево игры.
на доске записано 2.
первый игрок делает любой ход и на доске может появится одно из чисел 5, 7 или 4.
потом ходит второй игрок. И на доске может появится одно из следующих чисел: 8, 9, 10, 12, 14. Естественно, если каждый игрок играет на выигрыш, то числа 12 и 14 он писать не будет. Тогда наступает ход первого игрока, при котором на доске может появится 11, 13, 16, 15, 20, 18. Таким образом видим, что при любом ходе первого игрока, второй все равно выиграет.
| 2 |
1 игрок | 5 | | 7 | |4|
2 игрок | 8 10 10| |10 12 14 | | 8 8 9|
1 игрок |11 13 16| | 13 15 20| выигрыш 1 |11 13 16| |12 14 18|
надеюсь, что стало понятно :)
// PascalABC.NET 3.1, сборка 1200 от 13.03.2016
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
Writeln('k=',ArrRandom(ReadInteger('n='),1,999).Println.
Where(x->IsPrime(x)).Count)
end.
Тестовое решение:
n= 10
401 828 780 444 694 965 23 341 673 875
k=3
2. А вот так это пишется с процедурой
// PascalABC.NET 3.1, сборка 1200 от 13.03.2016
procedure IsPrime(n:integer; var res:boolean);
begin
if n<4 then res:=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;
res:=not found
end
end;
begin
var a:=ArrRandom(ReadInteger('n='),1,999); a.Println;
var k:=0;
var prime:boolean;
foreach var e in a do begin
IsPrime(e,prime);
if Prime then Inc(k)
end;
Writeln('k=',k)
end.
Тестовое решение:
n= 12
199 43 71 365 417 904 170 212 694 103 161 689
k=4