Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Permutation pow(int degree) const {
- if (degree == 0)
- return Permutation(degree);
- if (degree < 0)
- return inverse().pow(-degree);
- Permutation ans(size);
- bool *pos = new bool[size];
- int *circle = new int[size];
- for (unsigned int i = 0; i < size; i++)
- pos[i] = true;
- for (unsigned int i = 0; i < size; i++)
- if (pos[i]) {
- unsigned int len = 0;
- unsigned int begin = i;
- do {
- pos[begin] = false;
- circle[len++] = permutation[begin];
- begin = permutation[begin];
- } while (begin != i);
- for (unsigned int j = 0; j < len; j++)
- ans.permutation[circle[j]] = circle[(j + degree) % len];
- }
- delete[] pos;
- delete[] circle;
- return ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement