'Monte Carlo test for the symmetric/alternating group for degrees
>= 8.
More specifically, it is one-sided Monte Carlo with the
answer True (i.e., G is symmetric/alternating) guaranteed to be
correct, and the answer False being incorrect with probability eps.
Notes
The algorithm itself uses some nontrivial results from group theory and
number theory:
1) If a transitive group ``G`` of degree ``n`` contains an element
with a cycle of length ``n/2 < p < n-2`` for ``p`` a prime, ``G`` is the
symmetric or alternating group ([1], pp. 81-82)
2) The proportion of elements in the symmetric/alternating group having
the property described in 1) is approximately `\log(2)/\log(n)`
([1], p.82; [2], pp. 226-227).
The helper function ``_check_cycles_alt_sym`` is used to
go over the cycles in a permutation and look for ones satisfying 1).
Examples
>>> from sympy.combinatorics.perm_groups import PermutationGroup
>>> from sympy.combinatorics.named_groups import DihedralGroup
>>> D = DihedralGroup(10)
>>> D.is_alt_sym()
False
See Also
_check_cycles_alt_sym'

def is_alt_sym(self, eps=0.05, _random_prec=None):

    if (_random_prec is None):
        n = self.degree
        if (n < 8):
            return False
        if (not self.is_transitive()):
            return False
        if (n < 17):
            c_n = 0.34
        else:
            c_n = 0.57
        d_n = ((c_n * log(2)) / log(n))
        N_eps = int(((- log(eps)) / d_n))
        for i in range(N_eps):
            perm = self.random_pr()
            if _check_cycles_alt_sym(perm):
                return True
        return False
    else:
        for i in range(_random_prec['N_eps']):
            perm = _random_prec[i]
            if _check_cycles_alt_sym(perm):
                return True
        return False
