Advertisement
Guest User

Untitled

a guest
Jan 21st, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. program ExrF_ChangePolynom;
  2.  
  3. var
  4. i, n, k: integer;
  5. p: uint64;
  6. index: array of uint64;
  7. buf, z: uint64;
  8.  
  9. function add(a, b: Uint64): Uint64;
  10. begin
  11. if (b < p - a) then
  12. Result := b + a
  13. else
  14. Result := b - (p - a);
  15. end;
  16.  
  17. function BinSum(a, b: Uint64): Uint64;
  18. var
  19. r: Uint64;
  20. begin
  21. r := 0;
  22. while b <> 0 do
  23. begin
  24. if ((b mod 2) = 1) then
  25. r:=add(r,a);
  26. a := add(a,a);
  27. b := b div 2;
  28. end;
  29. BinSum := r;
  30. end;
  31.  
  32.  
  33.  
  34. begin
  35. Assign(Input, 'input.txt');
  36. Assign(Output, 'output.txt');
  37. reset(Input);
  38. rewrite(output);
  39. readln(p, n);
  40. SetLength(index, n + 1);
  41. for i := 0 to n do
  42. begin
  43. Read(index[i]);
  44. index[i] := index[i] mod p;
  45. end;
  46. for k := 1 to n do
  47. begin
  48. buf := index[k];
  49. for i := k downto 1 do
  50. begin
  51. if i = k then
  52. begin
  53. if -BinSum(index[i - 1], buf) < 0 then
  54. index[i] := p - (BinSum(index[i - 1], buf))
  55. else
  56. index[i] := (-BinSum(index[i - 1], buf));
  57. end
  58. else
  59. begin
  60. if index[i] < BinSum(buf, index[i - 1]) then
  61. index[i] := p - (-(index[i] - BinSum(buf, index[i - 1])))
  62. else
  63. index[i] := (index[i] - BinSum(buf, index[i - 1]));
  64. end;
  65. end;
  66. end;
  67. for i := n downto 0 do
  68. Writeln(index[i]);
  69. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement