[COLOR=#a020f0]module[/color] my_permutations
[COLOR=#2e8b57][b]type[/b][/color] permutation
[COLOR=#2e8b57][b]integer[/b][/color] :: element
[COLOR=#2e8b57][b]end type[/b][/color] permutation
[COLOR=#a020f0]interface[/color] [COLOR=#a020f0]assignment[/color]([COLOR=#804040][b]=[/b][/color])
[COLOR=#a020f0]module[/color] [COLOR=#a020f0]procedure[/color] permutation_from_array
[COLOR=#a020f0]end interface[/color]
[COLOR=#a020f0]interface[/color] [COLOR=#a020f0]operator[/color]([COLOR=#804040][b]*[/b][/color])
[COLOR=#a020f0]module[/color] [COLOR=#a020f0]procedure[/color] multiply_permutations
[COLOR=#a020f0]end interface[/color]
[COLOR=#a020f0]interface[/color] [COLOR=#a020f0]operator[/color]([COLOR=#804040][b]**[/b][/color])
[COLOR=#a020f0]module[/color] [COLOR=#a020f0]procedure[/color] permutation_power_n
[COLOR=#a020f0]end interface[/color]
[COLOR=#a020f0]contains[/color]
[COLOR=#a020f0]subroutine[/color] permutation_from_array(p, v)
[COLOR=#0000ff]! construct permutation from an integer array[/color]
[COLOR=#0000ff]! p = v[/color]
[COLOR=#2e8b57][b]integer[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: v
[COLOR=#2e8b57][b]type[/b][/color](permutation), [COLOR=#2e8b57][b]dimension[/b][/color]([COLOR=#008080]size[/color](v)), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]out[/b][/color]) :: p
p(:)%element [COLOR=#804040][b]=[/b][/color] v(:)
[COLOR=#a020f0]end subroutine[/color] permutation_from_array
[COLOR=#a020f0]subroutine[/color] print_permutation(p)
[COLOR=#0000ff]! Print the permutation[/color]
[COLOR=#2e8b57][b]type[/b][/color](permutation), [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]allocatable[/b][/color], [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: p
[COLOR=#2e8b57][b]integer[/b][/color] :: j, n
n [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]size[/color](p)
[COLOR=#804040][b]do[/b][/color] j[COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]1[/color], n
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) j,[COLOR=#ff00ff]' -> '[/color],p(j)%element
[COLOR=#804040][b]enddo[/b][/color]
[COLOR=#a020f0]end subroutine[/color] print_permutation
[COLOR=#a020f0]subroutine[/color] print_permutation_cycles(p)
[COLOR=#0000ff]! Print the permutation cycles[/color]
[COLOR=#2e8b57][b]type[/b][/color](permutation), [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]allocatable[/b][/color], [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: p
[COLOR=#2e8b57][b]integer[/b][/color] :: i, j, n, nr_cycles
[COLOR=#2e8b57][b] logical[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color]([COLOR=#008080]size[/color](p)) :: is_in_cycle [COLOR=#0000ff]! flags if element in cycle[/color]
n [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]size[/color](p)
[COLOR=#0000ff]! initialize flag array at .false.[/color]
[COLOR=#804040][b]do[/b][/color] i[COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]1[/color], n
is_in_cycle(i) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff].false.[/color]
[COLOR=#804040][b]end do[/b][/color]
nr_cycles [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
[COLOR=#804040][b]do[/b][/color] i[COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]1[/color], n
[COLOR=#0000ff]! if i not in other cycle[/color]
[COLOR=#804040][b]if[/b][/color] ([COLOR=#804040][b].not.[/b][/color](is_in_cycle(i))) [COLOR=#804040][b]then[/b][/color]
[COLOR=#804040][b]if[/b][/color] (i [COLOR=#804040][b].ne.[/b][/color] p(i)%element) [COLOR=#804040][b]then[/b][/color]
is_in_cycle(i) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff].true.[/color]
[COLOR=#0000ff]! i is now the new cycle begin[/color]
nr_cycles [COLOR=#804040][b]=[/b][/color] nr_cycles [COLOR=#804040][b]+[/b][/color] [COLOR=#ff00ff]1[/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#ff00ff]'(a2)'[/color],[COLOR=#804040][b]advance[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]'no'[/color]) [COLOR=#ff00ff]'('[/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#ff00ff]'(i2)'[/color],[COLOR=#804040][b]advance[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]'no'[/color]) i
j[COLOR=#804040][b]=[/b][/color]p(i)%element
[COLOR=#804040][b]do[/b][/color]
[COLOR=#804040][b]if[/b][/color] (j[COLOR=#804040][b].ne.[/b][/color]i) [COLOR=#804040][b]then[/b][/color]
is_in_cycle(j) [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff].true.[/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#ff00ff]'(i2)'[/color],[COLOR=#804040][b]advance[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]'no'[/color]) j
[COLOR=#804040][b]else[/b][/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#ff00ff]'(a)'[/color],[COLOR=#804040][b]advance[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]'no'[/color]) [COLOR=#ff00ff]')'[/color]
[COLOR=#804040][b]exit[/b][/color] [COLOR=#0000ff]! end loop[/color]
[COLOR=#804040][b]end if[/b][/color]
j[COLOR=#804040][b]=[/b][/color]p(j)%element [COLOR=#0000ff]! next cycle element[/color]
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#804040][b]enddo[/b][/color]
[COLOR=#804040][b]if[/b][/color] (nr_cycles [COLOR=#804040][b].eq.[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'No cycles found.'[/color]
[COLOR=#804040][b]else[/b][/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#0000ff]! next line[/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#a020f0]end subroutine[/color] print_permutation_cycles
[COLOR=#a020f0]function[/color] multiply_permutations(p, q) [COLOR=#a020f0]result[/color](r)
[COLOR=#0000ff]! Multiply permutations: r = p * q[/color]
[COLOR=#2e8b57][b]type[/b][/color](permutation), [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: p, q
[COLOR=#2e8b57][b]type[/b][/color](permutation), [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]allocatable[/b][/color] :: r
[COLOR=#2e8b57][b]integer[/b][/color] :: j, n
[COLOR=#804040][b]if[/b][/color] ([COLOR=#008080]size[/color](p) [COLOR=#804040][b].eq.[/b][/color] [COLOR=#008080]size[/color](q)) [COLOR=#804040][b]then[/b][/color]
n [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]size[/color](p)
[COLOR=#804040][b]allocate[/b][/color](r(n))
[COLOR=#804040][b]do[/b][/color] j[COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]1[/color], n
r(j) [COLOR=#804040][b]=[/b][/color] q(p(j)%element)
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#804040][b]else[/b][/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Error - the permutations are not compatible !!!'[/color]
[COLOR=#804040][b]stop[/b][/color] [COLOR=#0000ff]! abort processing[/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#a020f0]end function[/color] multiply_permutations
[COLOR=#a020f0]function[/color] permutation_power_2(p) [COLOR=#a020f0]result[/color](r)
[COLOR=#0000ff]! 2nd-power of permutation: r = p**2[/color]
[COLOR=#2e8b57][b]type[/b][/color](permutation), [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: p
[COLOR=#2e8b57][b]type[/b][/color](permutation), [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]allocatable[/b][/color] :: r
[COLOR=#2e8b57][b]integer[/b][/color] :: n
n [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]size[/color](p)
[COLOR=#804040][b]allocate[/b][/color](r(n))
r [COLOR=#804040][b]=[/b][/color] multiply_permutations(p, p)
[COLOR=#a020f0]end function[/color] permutation_power_2
[COLOR=#a020f0]function[/color] permutation_power_n(p, n) [COLOR=#a020f0]result[/color](r)
[COLOR=#0000ff]! nth-power of permutation: r = p**n[/color]
[COLOR=#2e8b57][b]type[/b][/color](permutation), [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: p
[COLOR=#2e8b57][b]integer[/b][/color], [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: n
[COLOR=#2e8b57][b]type[/b][/color](permutation), [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]allocatable[/b][/color] :: r
[COLOR=#2e8b57][b]integer[/b][/color] :: j
[COLOR=#804040][b]allocate[/b][/color](r([COLOR=#008080]size[/color](p)))
r [COLOR=#804040][b]=[/b][/color] p
[COLOR=#804040][b]if[/b][/color] (n [COLOR=#804040][b].gt.[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#804040][b]do[/b][/color] j[COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]1[/color], n[COLOR=#804040][b]-[/b][/color][COLOR=#ff00ff]1[/color]
r [COLOR=#804040][b]=[/b][/color] multiply_permutations(r, p)
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#804040][b]else[/b][/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Error - n ='[/color], n,[COLOR=#ff00ff]' not allowed !!!'[/color]
[COLOR=#804040][b]stop[/b][/color] [COLOR=#0000ff]! abort processing[/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#a020f0]end function[/color] permutation_power_n
[COLOR=#a020f0]end module[/color] my_permutations
[COLOR=#a020f0]program[/color] permutations
[COLOR=#a020f0]use[/color] my_permutations
[COLOR=#2e8b57][b]integer[/b][/color], [COLOR=#2e8b57][b]parameter[/b][/color] :: n [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]6[/color] [COLOR=#0000ff]! size of permutations[/color]
[COLOR=#2e8b57][b]type[/b][/color](permutation), [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]allocatable[/b][/color] :: p, q, r, s
[COLOR=#2e8b57][b]integer[/b][/color] :: j
[COLOR=#0000ff]! construct permutation p[/color]
[COLOR=#804040][b]allocate[/b][/color](p(n))
[COLOR=#0000ff]!p(:)%element=(/1, 2, 5, 4, 3, 6/)[/color]
[COLOR=#0000ff]! assigning values using overloaded assignment (=)[/color]
p[COLOR=#804040][b]=[/b][/color]([COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]1[/color], [COLOR=#ff00ff]2[/color], [COLOR=#ff00ff]5[/color], [COLOR=#ff00ff]4[/color], [COLOR=#ff00ff]3[/color], [COLOR=#ff00ff]6[/color][COLOR=#804040][b]/[/b][/color])
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation P ='[/color]
[COLOR=#a020f0]call[/color] print_permutation(p)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation P factorized into cycles ='[/color]
[COLOR=#a020f0]call[/color] print_permutation_cycles(p)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
[COLOR=#0000ff]! construct permutation q[/color]
[COLOR=#804040][b]allocate[/b][/color](q(n))
[COLOR=#0000ff]!q(:)%element=(/3, 2, 1, 4, 5, 6/)[/color]
[COLOR=#0000ff]! assigning values using overloaded assignment (=)[/color]
q[COLOR=#804040][b]=[/b][/color]([COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]3[/color], [COLOR=#ff00ff]2[/color], [COLOR=#ff00ff]1[/color], [COLOR=#ff00ff]4[/color], [COLOR=#ff00ff]5[/color], [COLOR=#ff00ff]6[/color][COLOR=#804040][b]/[/b][/color])
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation Q ='[/color]
[COLOR=#a020f0]call[/color] print_permutation(q)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation Q factorized into cycles ='[/color]
[COLOR=#a020f0]call[/color] print_permutation_cycles(q)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
[COLOR=#804040][b]allocate[/b][/color](r(n))
[COLOR=#0000ff]!r=multiply_permutations(p,q)[/color]
[COLOR=#0000ff]! compute permutation R = P * Q using overloaded operator (*)[/color]
r [COLOR=#804040][b]=[/b][/color] p [COLOR=#804040][b]*[/b][/color] q
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation R = P * Q'[/color]
[COLOR=#a020f0]call[/color] print_permutation(r)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation R factorized into cycles ='[/color]
[COLOR=#a020f0]call[/color] print_permutation_cycles(r)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
[COLOR=#0000ff]! Proof the factorization into cycles[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'-------------------------------------------------------'[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Proof the factorization procedure:'[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'-------------------------------------------------------'[/color]
[COLOR=#804040][b]allocate[/b][/color](s(n))
s[COLOR=#804040][b]=[/b][/color]([COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color], [COLOR=#ff00ff]1[/color], [COLOR=#ff00ff]4[/color], [COLOR=#ff00ff]3[/color], [COLOR=#ff00ff]6[/color], [COLOR=#ff00ff]5[/color][COLOR=#804040][b]/[/b][/color])
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation S ='[/color]
[COLOR=#a020f0]call[/color] print_permutation(s)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation S factorized into cycles ='[/color]
[COLOR=#a020f0]call[/color] print_permutation_cycles(s)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
s[COLOR=#804040][b]=[/b][/color]([COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color], [COLOR=#ff00ff]3[/color], [COLOR=#ff00ff]1[/color], [COLOR=#ff00ff]5[/color], [COLOR=#ff00ff]6[/color], [COLOR=#ff00ff]4[/color][COLOR=#804040][b]/[/b][/color])
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation S ='[/color]
[COLOR=#a020f0]call[/color] print_permutation(s)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation S factorized into cycles ='[/color]
[COLOR=#a020f0]call[/color] print_permutation_cycles(s)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
s[COLOR=#804040][b]=[/b][/color]([COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]2[/color], [COLOR=#ff00ff]3[/color], [COLOR=#ff00ff]6[/color], [COLOR=#ff00ff]5[/color], [COLOR=#ff00ff]4[/color], [COLOR=#ff00ff]1[/color][COLOR=#804040][b]/[/b][/color])
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation S ='[/color]
[COLOR=#a020f0]call[/color] print_permutation(s)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation S factorized into cycles ='[/color]
[COLOR=#a020f0]call[/color] print_permutation_cycles(s)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'-------------------------------------------------------'[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Proof the 2-th power procedure:'[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'-------------------------------------------------------'[/color]
r [COLOR=#804040][b]=[/b][/color] permutation_power_2(p)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation R = P**2'[/color]
[COLOR=#a020f0]call[/color] print_permutation(r)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation R factorized into cycles ='[/color]
[COLOR=#a020f0]call[/color] print_permutation_cycles(r)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
r [COLOR=#804040][b]=[/b][/color] permutation_power_2(s)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation R = S**2'[/color]
[COLOR=#a020f0]call[/color] print_permutation(r)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation R factorized into cycles ='[/color]
[COLOR=#a020f0]call[/color] print_permutation_cycles(r)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'-------------------------------------------------------'[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Proof the n-th power procedure:'[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'-------------------------------------------------------'[/color]
[COLOR=#804040][b]do[/b][/color] j[COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]1[/color], [COLOR=#ff00ff]5[/color]
r [COLOR=#804040][b]=[/b][/color] permutation_power_n(s, j)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation R = S **'[/color],j
[COLOR=#a020f0]call[/color] print_permutation(r)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation R factorized into cycles ='[/color]
[COLOR=#a020f0]call[/color] print_permutation_cycles(r)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'-------------------------------------------------------'[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Proof the n-th power with overloaded operator **:'[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'-------------------------------------------------------'[/color]
[COLOR=#804040][b]do[/b][/color] j[COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]1[/color], [COLOR=#ff00ff]5[/color]
[COLOR=#0000ff]! compute permutation R = S ** j using overloaded operator (**)[/color]
r [COLOR=#804040][b]=[/b][/color] s [COLOR=#804040][b]**[/b][/color] j
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation R = S **'[/color],j
[COLOR=#a020f0]call[/color] print_permutation(r)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Permutation R factorized into cycles ='[/color]
[COLOR=#a020f0]call[/color] print_permutation_cycles(r)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#a020f0]end program[/color] permutations