Ë
    S"“ja  ã                   ó(   — 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                ú^/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/telethon/crypto/factorization.pyÚ	factorizezFactorization.factorize   s«  € ð �‰6�QŠ;Ø�b˜A‘g�:Ðä˜!˜R !™VÓ$¤g¨a°°a±Ó&8¼'À!ÀRÈ!ÁVÓ:Lˆaˆ1ˆØˆˆˆˆA�Øˆ
ˆˆBà�1ŠfØˆAÜ˜1“Xò -�Ü˜˜A˜r“] QÑ&¨"Ñ,‘ð-ð ˆAØ�a’%˜A šFØ�Üœs 1 a¨!¡e›}Ó-ò .�AÜ˜Q  2›¨Ñ*¨bÑ0�AØœS  Q¡›ZÑ(¨2Ñ-‘Að.ð —G‘G˜A˜r“N�Ø�Q‘�ð �a’%˜A ›Fð �‰FˆAð �1‹fð" �Š7ØÜ˜"˜a “n qÑ(¨BÑ.�Ø—G‘GœC  B¡›K¨Ó,�Ø�q’5Øð	 ð �"˜‘'ˆ1ˆØ˜Qš��1ˆvÐ* 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˜!‘eˆqˆAò ð ˆ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   