Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int Mult_256(int a, int b)//// Для 𝑎(𝑥), 𝑏(𝑥) возвращает 𝑐(𝑥)=𝑎(𝑥)∙𝑏(𝑥) 𝑚𝑜𝑑 𝑓(𝑥).
- {
- int t = 0, mask = 1;
- for (int i = 0; i < 8; i++)
- {
- if ((b & mask) != 0)
- t ^= a;
- if ((a & 128) == 0) a = a << 1;
- else a = (a << 1) ^ 285;
- mask = mask << 1;
- }
- return t;
- }
- int Power_256(int a, int b)//// Возведение в степень: возвращает 𝑎(𝑥)^𝑏 𝑚𝑜𝑑 𝑓(𝑥).
- {
- int c = 1;
- while (b > 0)
- {
- if (b % 2 != 0) c = Mult_256(c, a);
- a = Mult_256(a, a);
- b = b >> 1;
- }
- return c;
- }
- ////общий вид
- int pow2[9] = {1, 2, 4, 8, 16, 32, 64, 128, 256};
- int f[9] = {-1, 3, 7, 11, 19, 37, 67, 131, 285 };
- int Mul(int a, int b, int power_2)
- {// умножение
- int mask=1, t=0;
- int half = pow2[power_2 -1];
- for (int i = 0; i < pow2[power_2]; i++)
- {
- if((b & mask)!=0)
- t = t^a;
- if ((a & half) == 0)
- a = a << 1;
- else
- a = (a << 1) ^ f[power_2];
- mask = mask << 1;
- }
- return t;
- }
- int Power(int a, int b, int power_2)//// Возведение в степень: возвращает 𝑎(𝑥)^𝑏 𝑚𝑜𝑑 𝑓(𝑥).
- {
- int c = 1;
- while (b > 0)
- {
- if (b % 2 != 0) c = Mul(c, a, power_2);
- a = Mul(a, a, power_2);
- b = b >> 1;
- }
- return c;
- }
Add Comment
Please, Sign In to add comment