DilyaraL

Вычисления в полях хар.2

Dec 18th, 2020 (edited)
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. int Mult_256(int a, int b)//// Для 𝑎(𝑥), 𝑏(𝑥) возвращает 𝑐(𝑥)=𝑎(𝑥)∙𝑏(𝑥) 𝑚𝑜𝑑 𝑓(𝑥).
  2. {
  3. int t = 0, mask = 1;
  4. for (int i = 0; i < 8; i++)
  5. {
  6. if ((b & mask) != 0)
  7. t ^= a;
  8. if ((a & 128) == 0) a = a << 1;
  9. else a = (a << 1) ^ 285;
  10. mask = mask << 1;
  11. }
  12. return t;
  13. }
  14.  
  15. int Power_256(int a, int b)//// Возведение в степень: возвращает 𝑎(𝑥)^𝑏 𝑚𝑜𝑑 𝑓(𝑥).
  16. {
  17. int c = 1;
  18. while (b > 0)
  19. {
  20. if (b % 2 != 0) c = Mult_256(c, a);
  21. a = Mult_256(a, a);
  22. b = b >> 1;
  23. }
  24. return c;
  25. }
  26.  
  27. ////общий вид
  28.  
  29. int pow2[9] = {1, 2, 4, 8, 16, 32, 64, 128, 256};
  30. int f[9] = {-1, 3, 7, 11, 19, 37, 67, 131, 285 };
  31.  
  32. int Mul(int a, int b, int power_2)
  33. {// умножение
  34.  
  35. int mask=1, t=0;
  36. int half = pow2[power_2 -1];
  37.  
  38. for (int i = 0; i < pow2[power_2]; i++)
  39. {
  40. if((b & mask)!=0)
  41. t = t^a;
  42. if ((a & half) == 0)
  43. a = a << 1;
  44. else
  45. a = (a << 1) ^ f[power_2];
  46. mask = mask << 1;
  47. }
  48. return t;
  49. }
  50.  
  51. int Power(int a, int b, int power_2)//// Возведение в степень: возвращает 𝑎(𝑥)^𝑏 𝑚𝑜𝑑 𝑓(𝑥).
  52. {
  53. int c = 1;
  54. while (b > 0)
  55. {
  56. if (b % 2 != 0) c = Mul(c, a, power_2);
  57. a = Mul(a, a, power_2);
  58. b = b >> 1;
  59. }
  60. return c;
  61. }
Add Comment
Please, Sign In to add comment