Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program ExrF_ChangePolynom;
- var
- i, n, k: integer;
- p: uint64;
- index: array of uint64;
- buf, z: uint64;
- function add(a, b: Uint64): Uint64;
- begin
- if (b < p - a) then
- Result := b + a
- else
- Result := b - (p - a);
- end;
- function BinSum(a, b: Uint64): Uint64;
- var
- r: Uint64;
- begin
- r := 0;
- while b <> 0 do
- begin
- if ((b mod 2) = 1) then
- r:=add(r,a);
- a := add(a,a);
- b := b div 2;
- end;
- BinSum := r;
- end;
- begin
- Assign(Input, 'input.txt');
- Assign(Output, 'output.txt');
- reset(Input);
- rewrite(output);
- readln(p, n);
- SetLength(index, n + 1);
- for i := 0 to n do
- begin
- Read(index[i]);
- index[i] := index[i] mod p;
- end;
- for k := 1 to n do
- begin
- buf := index[k];
- for i := k downto 1 do
- begin
- if i = k then
- begin
- if -BinSum(index[i - 1], buf) < 0 then
- index[i] := p - (BinSum(index[i - 1], buf))
- else
- index[i] := (-BinSum(index[i - 1], buf));
- end
- else
- begin
- if index[i] < BinSum(buf, index[i - 1]) then
- index[i] := p - (-(index[i] - BinSum(buf, index[i - 1])))
- else
- index[i] := (index[i] - BinSum(buf, index[i - 1]));
- end;
- end;
- end;
- for i := n downto 0 do
- Writeln(index[i]);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement