
    ;Sia                     (    d Z ddlmZ  G d d      Zy)z/
This module holds a fast Factorization class.
    )randintc                   0    e Zd ZdZed        Zed        Zy)FactorizationzB
    Simple module to factorize large numbers really quickly.
    c                    |dz  dk(  rd|dz  fS t        d|dz
        t        d|dz
        t        d|dz
        }}}dx}x}}dx}}	|dk(  r|}t        |      D ]  }
t        |d|      |z   |z  } d}||k  rm|dk(  rh|}	t        t        |||z
              D ])  }
t        |d|      |z   |z  }|t	        ||z
        z  |z  }+ | j                  ||      }||z  }||k  r|dk(  rh|dz  }|dk(  r||k(  r9	 t        |	d|      |z   |z  }	| j                  t	        ||	z
        |      }|dkD  rn8|||z  }}||k  r||fS ||fS )a  
        Factorizes the given large integer.

        Implementation from https://comeoncodeon.wordpress.com/2010/09/18/pollard-rho-brent-integer-factorization/.

        :param pq: the prime pair pq.
        :return: a tuple containing the two factors p and q.
           r      )r   rangepowminabsgcd)clspqycmgrqxysikps                b/var/www/OnlineNewsSite/project/venv/lib/python3.12/site-packages/telethon/crypto/factorization.py	factorizezFactorization.factorize   s    6Q;bAg:!R!V$gaa&8'!R!V:La1A
B1fA1X -Ar]Q&",- Aa%AFs1a!e}- .AQ2*b0ASQZ(2-A. GGArNQ a%AF FA 1f" 7"anq(B.GGCBK,q5	  "'1Q1v*QF*    c                     |r
|| |z  }} |r
| S )z
        Calculates the Greatest Common Divisor.

        :param a: the first number.
        :param b: the second number.
        :return: GCD(a, b)
         )abs     r   r   zFactorization.gcd7   s      a!eqA  r   N)__name__
__module____qualname____doc__classmethodr   staticmethodr   r   r   r   r   r      s0     )+ )+V  r   r   N)r%   randomr   r   r   r   r   <module>r)      s    < <r   