§
    OŠtj«@  ã                   óB  — d dl Z d dlmZ d gdz  Z edd¦  «        D ]Zegddez
  z  z  edez  ddedz   z  …<   Œd"d„Zd"d„Zd„ Z	d	„ Z
d
„ Zd„ Ze j        Ze j        Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d „ Z#d!„ Z$dS )#é    Né   é   é   é   c                 ó~  — | sd S t          | |z	  ¦  «        } | dz  }|rt          |         |z   S d|z   }| dz  } |                      ¦   «         dz
  }| d|z  k    r||z   S |dk     r| dz  s| dz  } |dz  }| dz  ¯n4|dz	  }| dz  s*| d|z  dz
  z  r|dz  }| d|z  dz
  z  °| |z  } ||z  }| dz  ¯*|t          | dz           z   S )Néÿ   r   r   i,  )ÚabsÚ_small_trailingÚ
bit_length)ÚxÚnÚlow_byteÚtÚzÚps         úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/external/ntheory.pyÚ	bit_scan1r      s1  € Øð ØˆÝˆA�‰F‰Œ€AØ�4‰x€HØð -Ý˜xÔ(¨1Ñ,Ð,à	ˆA‰€AØˆ!�G€Aà	�Š‰Œ˜Ñ€AØˆA�‰F‚{€{Ø�1‰uˆàˆ3‚w€wà�d‘(ð 	Ø�!‰GˆAØ�‰FˆAð �d‘(ð 	øð �‰FˆØ�d‘(ð 	Ø˜˜Q™ !‘|Ñ$ð Ø�a‘�ð ˜˜Q™ !‘|Ñ$ð à�!‰GˆAØ�‰FˆAð	 �d‘(ð 	ð
 �˜q 4™xÔ(Ñ(Ð(ó    c                 ó.   — t          | d|z  z   |¦  «        S )Nr   )r   )r   r   s     r   Ú	bit_scan0r   0   s   € Ý�Q˜!˜q™&‘\ 1Ñ%Ô%Ð%r   c                 óÄ  — |dk     rt          d¦  «        ‚| dk    rdS |dk    rt          | ¦  «        }| |z	  |fS d}t          | |¦  «        \  }}|s�|} |dz  }|dk    rk|dz  g}|rc|d         }t          | |¦  «        \  }}|s0|dt          |¦  «        z  z  }|} |                     |dz  ¦  «         n|                     ¦   «          |°ct          | |¦  «        \  }}|¯�| |fS )Né   zfactor must be > 1r   )r   r   r   é   éÿÿÿÿ)Ú
ValueErrorr   ÚdivmodÚlenÚappendÚpop)r   ÚfÚbÚmÚyÚremÚpow_listÚ_fs           r   Úremover'   4   s&  € Øˆ1‚u€uÝÐ-Ñ.Ô.Ð.ØˆA‚v€vØˆtØˆA‚v€vÝ�a‰LŒLˆØ�A‰v�qˆyÐØ	€AÝ�A�q‰\Œ\�F€A€sØð ØˆØ	ˆQ‰ˆØˆqŠ5ˆ5Ø˜1™�vˆHØð #Ø˜b”\�Ý  2™œ‘��3Øð #Ø˜�c (™mœmÑ+Ñ+�AØ�AØ—O’O B¨¡EÑ*Ô*Ð*Ð*à—L’L‘N”N�Nð ð #õ ˜˜1‘”‰ˆˆ3ð ð ð ˆaˆ4€Kr   c                 ó^   — t          t          j        t          | ¦  «        ¦  «        ¦  «        S )z
Return x!.)ÚintÚmlibÚifac©r   s    r   Ú	factorialr-   P   s    € å�tŒy�˜Q™œÑ Ô Ñ!Ô!Ð!r   c                 ó^   — t          t          j        t          | ¦  «        ¦  «        ¦  «        S )zInteger square root of x.)r)   r*   Úisqrtr,   s    r   Úsqrtr0   U   s    € å�tŒz�#˜a™&œ&Ñ!Ô!Ñ"Ô"Ð"r   c                 ó†   — t          j        t          | ¦  «        ¦  «        \  }}t          |¦  «        t          |¦  «        fS )z'Integer square root of x and remainder.©r*   Úsqrtremr)   )r   ÚsÚrs      r   r3   r3   Z   s2   € åŒ<�˜A™œÑÔ�D€A€qÝ�‰FŒF•C˜‘F”FÐÐr   c                 ó    — | dk     rd|  fS d| fS )Nr   r   r   © ©r   s    r   Ú_signr9   d   s   € Øˆ1‚u€uØ�A�2ˆvˆØˆaˆ4€Kr   c                 ó4  — | r|s-t          | ¦  «        pt          |¦  «        }|sdS || |z  ||z  fS t          | ¦  «        \  }} t          |¦  «        \  }}d\  }}d\  }}|r-t          | |¦  «        \  }	}
||
}} |||	|z  z
  }}|||	|z  z
  }}|°-| ||z  ||z  fS )N)r   r   r   )r   r   ©r   r   )r	   r9   r   )Úar!   ÚgÚx_signÚy_signr   r5   r#   r4   ÚqÚcs              r   ÚgcdextrB   j   sÞ   € Øð #�Að #Ý�‰FŒFÐ•c˜!‘f”fˆØð 	Ø�9Ø�1˜‘6˜1 ™6Ð"Ð"å�a‘”�I€FˆAÝ�a‘”�I€FˆAØ�D€A€qØ�D€A€qà
ð Ý�a˜‰|Œ|‰ˆˆ1Ø�!ˆ1ˆØ�!�a˜‘c‘'ˆ1ˆØ�!�a˜‘c‘'ˆ1ˆð	 ð ð ˆq�6‰z˜1˜v™:Ð&Ð&r   c                 óÚ   — | dk     rdS dd| dz  z  z  rdS | dz  }dd|dz  z  z  rdS d	d|d
z  z  z  rdS dd|dz  z  z  rdS t          j        t          | ¦  «        ¦  «        d         dk    S )z$Return True if x is a square number.r   Fl	   ì}ù{·wïoÏ^¿?{þ~ý r   é   iE¯ l   ì}}k-î[o{?_}éc   l   ì=}:žM¯vÏ?£_ é[   l   ì}¬sŽ�;®y½éU   r2   ©r   r"   s     r   Ú	is_squarerI      s£   € àˆ1‚u€uØˆuð* *¨Q°1°s±7©^Ñ<ð ØˆuØ	ˆF‰
€AØ" a¨A°©F¡mÑ4ð ØˆuØ  A¨!¨b©&¡MÑ2ð ØˆuØ !¨¨B©¡-Ñ0ð ØˆuÝŒ<�˜A™œÑÔ Ô" aÒ'Ð'r   c                 ó`   — 	 t          | d|¦  «        S # t          $ r t          d¦  «        ‚w xY w)zÍModular inverse of x modulo m.

    Returns y such that x*y == 1 mod m.

    Uses ``math.pow`` but reproduces the behaviour of ``gmpy2.invert``
    which raises ZeroDivisionError if no inverse exists.
    r   zinvert() no inverse exists)Úpowr   ÚZeroDivisionErrorrH   s     r   ÚinvertrM   £   sA   € ð>Ý�1�b˜!‰}Œ}ÐøÝð >ð >ð >ÝÐ <Ñ=Ô=Ð=ð>øøøs   ‚ “-c                 ó†   — |dk    s|dz  st          d¦  «        ‚| |z  } | sdS t          | |dz
  dz  |¦  «        dk    rdS dS )z€Legendre symbol (x / y).

    Following the implementation of gmpy2,
    the error is raised only when y is an even number.
    r   r   zy should be an odd primer   r   )r   rK   )r   r#   s     r   ÚlegendrerO   ±   sc   € ð 	ˆA‚v€v�Q˜‘U€vÝÐ3Ñ4Ô4Ð4Øˆ�F€AØð ØˆqÝ
ˆ1ˆq�1‰u˜‰l˜AÑÔ !Ò#Ð#ØˆqØˆ2r   c                 óp  — |dk    s|dz  st          d¦  «        ‚| |z  } | st          |dk    ¦  «        S |dk    s| dk    rdS t          | |¦  «        dk    rdS d}| dk    rU| dz  dk    r$| dk    r| dz  } |dz  dv r| }| dz  dk    r| dk    °|| }} | dz  |dz  cxk    rdk    rn n| }| |z  } | dk    °U|S )	zJacobi symbol (x / y).r   r   z#y should be an odd positive integerr   r   ©é   r   é   rR   )r   r)   Úgcd)r   r#   Újs      r   ÚjacobirV   Á   s  € àˆA‚v€v�Q˜‘U€vÝÐ>Ñ?Ô?Ð?Øˆ�F€AØð Ý�1˜’6‰{Œ{ÐØˆA‚v€v��a’�ØˆqÝ
ˆ1ˆa�y„y�A‚~€~ØˆqØ	€AØ
ˆqŠ&ˆ&Ø�!‰e�qŠjˆj˜Q šU˜UØ�!‰GˆAØ�1‰u˜ˆˆØ�B�ð �!‰e�qŠjˆj˜Q šU˜Uð �!ˆ1ˆØˆq‰5�A˜‘EÐÐÒÐ˜QÒÐÐÐÐØ�ˆAØ	ˆQ‰ˆð ˆqŠ&ˆ&ð €Hr   c                 óè   — t          | |¦  «        dk    rdS |dk    rdS |dk     r| dk     rdnd}t          |¦  «        }t          |¦  «        }||z  }|dz  r
| dz  dv r| }|t          | |¦  «        z  S )zKronecker symbol (x / y).r   r   r   r   r   rQ   )rT   r	   r   rV   )r   r#   Úsignr4   s       r   Ú	kroneckerrY   Ù   s�   € å
ˆ1ˆa�y„y�A‚~€~ØˆqØˆA‚v€vØˆqØ�Q’�˜1˜qš5˜5ˆ2ˆ2 a€DÝˆA‰Œ€AÝ�!‰Œ€AØˆ!�G€AØˆ1�uð ��Q‘˜&��ØˆuˆØ•&˜˜A‘,”,ÑÐr   c                 ó  — | dk     rt          d¦  «        ‚|dk     rt          d¦  «        ‚| dv r| dfS |dk    r| dfS |dk    r)t          j        | ¦  «        \  }}t          |¦  «        | fS ||                      ¦   «         k    rdS 	 t          | d	|z  z  d
z   ¦  «        }nm# t
          $ r` t          j        | ¦  «        |z  }|dk    r.t          |dz
  ¦  «        }t          d||z
  z  dz   ¦  «        |z  }nt          d|z  ¦  «        }Y nw xY w|dk    r9d|}}	 ||dz
  z  }||dz
  |z  | |z  z   |z  }}t          ||z
  ¦  «        dk     rnŒ3n|}||z  }|| k     r|dz  }||z  }|| k     °|| k    r|dz  }||z  }|| k    °||| k    fS )Nr   zy must be nonnegativer   zn must be positiver;   Tr   )r   Fg      ð?g      à?é5   g       @l           r   )	r   r*   r3   r)   r   ÚOverflowErrorÚmathÚlog2r	   )	r#   r   r   r$   ÚguessÚexpÚshiftÚxprevr   s	            r   Úirootrc   è   s  € Øˆ1‚u€uÝÐ0Ñ1Ô1Ð1Øˆ1‚u€uÝÐ-Ñ.Ô.Ð.ØˆF€{€{Ø�$ˆwˆØˆA‚v€vØ�$ˆwˆØˆA‚v€vÝ”˜a‘”‰ˆˆ3Ý�1‰vŒv˜3�wˆÐØˆA�LŠL‰NŒNÒÐØˆxð"Ý�A˜˜1™‘I ‘OÑ$Ô$ˆˆøÝð "ð "ð "ÝŒi˜‰lŒl˜1‰nˆØ�Š8ˆ8Ý˜˜b™‘M”MˆEÝ˜˜c E™kÑ*¨QÑ.Ñ/Ô/°5Ñ8ˆEˆEå˜˜S™‘M”MˆEøøð"øøøð ˆu‚}€}à�uˆqˆð	Ø�A˜‘E‘
ˆAØ˜A ™E 1™9 q¨!¡tÑ+¨aÑ/�1ˆEÝ�1�u‘9‰~Œ~ Ò!Ð!Øð		ð àˆà	ˆ1‰€AØ
ˆaŠ%ˆ%Ø	ˆQ‰ˆØˆq‰Dˆð ˆaŠ%ˆ%ð ˆaŠ%ˆ%Ø	ˆQ‰ˆØˆq‰Dˆð ˆaŠ%ˆ%ð ˆa�1Šfˆ9Ðs   ÂB  Â A'D
Ä	D
c                 ó  — |dk     rt          d¦  «        ‚| dk     rt          d¦  «        ‚| dk    rdS | dz  dk    r| dk    S || z  }t          | |¦  «        dk    rt          d¦  «        ‚t          || dz
  | ¦  «        dk    S )Nr   z7is_fermat_prp() requires 'a' greater than or equal to 2r   z.is_fermat_prp() requires 'n' be greater than 0Fr   z&is_fermat_prp() requires gcd(n,a) == 1)r   rT   rK   ©r   r<   s     r   Úis_fermat_prprf     sš   € Øˆ1‚u€uÝÐRÑSÔSÐSØˆ1‚u€uÝÐIÑJÔJÐJØˆA‚v€vØˆuØˆ1�u�‚z€zØ�AŠvˆØˆ�F€AÝ
ˆ1ˆa�y„y�A‚~€~ÝÐAÑBÔBÐBÝˆq�!�a‘%˜ÑÔ˜qÒ Ð r   c                 ó&  — |dk     rt          d¦  «        ‚| dk     rt          d¦  «        ‚| dk    rdS | dz  dk    r| dk    S || z  }t          | |¦  «        dk    rt          d¦  «        ‚t          || dz	  | ¦  «        t          || ¦  «        | z  k    S )Nr   z6is_euler_prp() requires 'a' greater than or equal to 2r   z-is_euler_prp() requires 'n' be greater than 0Fr   z%is_euler_prp() requires gcd(n,a) == 1)r   rT   rK   rV   re   s     r   Úis_euler_prprh   %  s§   € Øˆ1‚u€uÝÐQÑRÔRÐRØˆ1‚u€uÝÐHÑIÔIÐIØˆA‚v€vØˆuØˆ1�u�‚z€zØ�AŠvˆØˆ�F€AÝ
ˆ1ˆa�y„y�A‚~€~ÝÐ@ÑAÔAÐAÝˆq�!�q‘&˜!ÑÔ¥ q¨!¡¤¨qÑ 0Ò0Ð0r   c                 óê   — t          | dz
  ¦  «        }t          || |z	  | ¦  «        }|dk    s	|| dz
  k    rdS t          |dz
  ¦  «        D ](}t          |d| ¦  «        }|| dz
  k    r dS |dk    r dS Œ)dS )Nr   Tr   F)r   rK   Úrange)r   r<   r4   Ú_s       r   Ú_is_strong_prprl   4  s˜   € Ý�!�a‘%ÑÔ€AÝˆAˆq�A‰v�qÑÔ€AØˆA‚v€v��a˜!‘e’�ØˆtÝ�1�q‘5‰\Œ\ð ð ˆÝ��1�a‰LŒLˆØ��A‘Š:ˆ:Ø�4�4Ø�Š6ˆ6Ø�5�5ð àˆ5r   c                 óô   — |dk     rt          d¦  «        ‚| dk     rt          d¦  «        ‚| dk    rdS | dz  dk    r| dk    S || z  }t          | |¦  «        dk    rt          d¦  «        ‚t          | |¦  «        S )Nr   z7is_strong_prp() requires 'a' greater than or equal to 2r   z.is_strong_prp() requires 'n' be greater than 0Fr   z&is_strong_prp() requires gcd(n,a) == 1)r   rT   rl   re   s     r   Úis_strong_prprn   B  s�   € Øˆ1‚u€uÝÐRÑSÔSÐSØˆ1‚u€uÝÐIÑJÔJÐJØˆA‚v€vØˆuØˆ1�u�‚z€zØ�AŠvˆØˆ�F€AÝ
ˆ1ˆa�y„y�A‚~€~ÝÐAÑBÔBÐBÝ˜!˜QÑÔÐr   c                 óà  — |dk    rdS |dz  d|z  z
  }d}|}|| z  }|dk    rft          |¦  «        dd…         D ]L}||z  | z  }||z  dz
  | z  }|dk    r1||z  |z   ||z  ||z  z   }}|dz  r|| z  }|dz  r|| z  }|dz	  |dz	  }}ŒM�n\|dk    rs|d	k    rmt          |¦  «        dd…         D ]O}||z  | z  }|dk    r||z  dz
  | z  }n||z  dz   | z  }d}|dk    r ||z   |dz  }}|dz  r|| z  }|dz  }||z  }d	}ŒP|| z  }nã|dk    rgt          |¦  «        dd…         D ]N}||z  | z  }||z  d|z  z
  | z  }||z  }|dk    r&||z   ||z  dz  }}|dz  r|| z  }|dz  }||z
  }||z  }|| z  }ŒOnvt          |¦  «        dd…         D ]^}||z  | z  }||z  d|z  z
  | z  }||z  }|dk    r6||z  |z   ||z  ||z  z   }}|dz  r|| z  }|dz  r|| z  }|dz	  |dz	  }}||z  }|| z  }Œ_|| z  || z  |fS )
aÀ  Return the modular Lucas sequence (U_k, V_k, Q_k).

    Explanation
    ===========

    Given a Lucas sequence defined by P, Q, returns the kth values for
    U and V, along with Q^k, all modulo n. This is intended for use with
    possibly very large values of n and k, where the combinatorial functions
    would be completely unusable.

    .. math ::
        U_k = \begin{cases}
             0 & \text{if } k = 0\\
             1 & \text{if } k = 1\\
             PU_{k-1} - QU_{k-2} & \text{if } k > 1
        \end{cases}\\
        V_k = \begin{cases}
             2 & \text{if } k = 0\\
             P & \text{if } k = 1\\
             PV_{k-1} - QV_{k-2} & \text{if } k > 1
        \end{cases}

    The modular Lucas sequences are used in numerous places in number theory,
    especially in the Lucas compositeness tests and the various n + 1 proofs.

    Parameters
    ==========

    n : int
        n is an odd number greater than or equal to 3
    P : int
    Q : int
        D determined by D = P**2 - 4*Q is non-zero
    k : int
        k is a nonnegative integer

    Returns
    =======

    U, V, Qk : (int, int, int)
        `(U_k \bmod{n}, V_k \bmod{n}, Q^k \bmod{n})`

    Examples
    ========

    >>> from sympy.external.ntheory import _lucas_sequence
    >>> N = 10**2000 + 4561
    >>> sol = U, V, Qk = _lucas_sequence(N, 3, 1, N//2); sol
    (0, 2, 1)

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Lucas_sequence

    r   )r   r   r   r   rS   r   rR   NÚ1r   )Úbin)	r   ÚPÚQÚkÚDÚUÚVÚQkr!   s	            r   Ú_lucas_sequencery   Q  s,  € ðr 	ˆA‚v€vØˆyØ	ˆ1‰ˆq�‰s‰
€AØ	€AØ	€AØ	
ˆQ‰€BØˆA‚v€vå�Q‘”˜˜˜”ð 		&ð 		&ˆAØ�1‘˜‘	ˆAØ�1‘�q‘˜A‘ˆAØ�CŠxˆxØ˜‘s˜Q‘w  !¡ a¨¡c¡	�1�Ø�q‘5ð Ø˜‘F�AØ�q‘5ð Ø˜‘F�AØ˜A‘v˜q A™v�1�øñ		&ð 
ˆaŠˆ�A˜’G�Gå�Q‘”˜˜˜”ð 	ð 	ˆAØ�1‘˜‘	ˆAØ�QŠwˆwØ�q‘S˜1‘W ‘M��à�q‘S˜1‘W ‘M�Ø�Ø�CŠxˆxð ˜A™˜q A™v�1�Ø�q‘5ð Ø˜‘F�AØ�a‘�Ø�Q‘�Ø�øØ
ˆa‰ˆˆØ	
ˆaŠˆÝ�Q‘”˜˜˜”ð 	ð 	ˆAØ�1‘˜‘	ˆAØ�1‘�q˜‘t‘˜qÑ ˆAØ�"‰HˆBØ�CŠxˆxð ˜A™  !¡¨™z�1�Ø�q‘5ð Ø˜‘F�AØ�a‘�Ø˜‘E�Ø�a‘�Ø�!‰GˆBˆBð	õ  �Q‘”˜˜˜”ð 	ð 	ˆAØ�1‘˜‘	ˆAØ�1‘�q˜‘t‘˜qÑ ˆAØ�"‰HˆBØ�CŠxˆxØ˜‘s˜Q‘w  !¡ a¨¡c¡	�1�Ø�q‘5ð Ø˜‘F�AØ�q‘5ð Ø˜‘F�AØ˜A‘v˜q A™v�1�Ø�a‘�Ø�!‰GˆBˆBØ�‰E�1�q‘5˜"ÐÐr   c                 óì   — |dz  d|z  z
  }|dk    s
|dk    s|dvrt          d¦  «        ‚| dk     rt          d¦  «        ‚| dk    rdS | dz  dk    r| dk    S t          | ||| ¦  «        d         || z  k    S )	Nr   rS   r   )r   r   z,invalid values for p,q in is_fibonacci_prp()r   z1is_fibonacci_prp() requires 'n' be greater than 0F)r   ry   ©r   r   r@   Úds       r   Úis_fibonacci_prpr}   Ð  s›   € Ø	ˆ1‰ˆq�‰s‰
€AØˆA‚v€v��a’�˜1 GÐ+Ð+ÝÐGÑHÔHÐHØˆ1‚u€uÝÐLÑMÔMÐMØˆA‚v€vØˆuØˆ1�u�‚z€zØ�AŠvˆÝ˜1˜a  AÑ&Ô& qÔ)¨Q°©UÒ2Ð2r   c           
      ó@  — |dz  d|z  z
  }|dk    rt          d¦  «        ‚| dk     rt          d¦  «        ‚| dk    rdS | dz  dk    r| dk    S t          | ||z  ¦  «        d| fvrt          d¦  «        ‚t          | ||| t          || ¦  «        z
  ¦  «        d         dk    S )	Nr   rS   r   z(invalid values for p,q in is_lucas_prp()r   z-is_lucas_prp() requires 'n' be greater than 0Fz)is_lucas_prp() requires gcd(n,2*q*D) == 1)r   rT   ry   rV   r{   s       r   Úis_lucas_prpr   Ý  s¼   € Ø	ˆ1‰ˆq�‰s‰
€AØˆA‚v€vÝÐCÑDÔDÐDØˆ1‚u€uÝÐHÑIÔIÐIØˆA‚v€vØˆuØˆ1�u�‚z€zØ�AŠvˆÝ
ˆ1ˆa�‰c�{„{˜1˜a˜&Ð Ð ÝÐDÑEÔEÐEÝ˜1˜a  A­¨q°!©¬Ñ$4Ñ5Ô5°aÔ8¸AÒ=Ð=r   c                 ó  — t          ddd¦  «        D ]m}|dz  r| }t          || ¦  «        }|dk    r't          | dd|z
  dz  | dz   ¦  «        d         dk    c S |dk    r|| z  r dS |d	k    rt          | ¦  «        r dS Œnt	          d
¦  «        ‚)ad  Lucas compositeness test with the Selfridge parameters for n.

    Explanation
    ===========

    The Lucas compositeness test checks whether n is a prime number.
    The test can be run with arbitrary parameters ``P`` and ``Q``, which also change the performance of the test.
    So, which parameters are most effective for running the Lucas compositeness test?
    As an algorithm for determining ``P`` and ``Q``, Selfridge proposed method A [1]_ page 1401
    (Since two methods were proposed, referred to simply as A and B in the paper,
    we will refer to one of them as "method A").

    method A fixes ``P = 1``. Then, ``D`` defined by ``D = P**2 - 4Q`` is varied from 5, -7, 9, -11, 13, and so on,
    with the first ``D`` being ``jacobi(D, n) == -1``. Once ``D`` is determined,
    ``Q`` is determined to be ``(P**2 - D)//4``.

    References
    ==========

    .. [1] Robert Baillie, Samuel S. Wagstaff, Lucas Pseudoprimes,
           Math. Comp. Vol 35, Number 152 (1980), pp. 1391-1417,
           https://doi.org/10.1090%2FS0025-5718-1980-0583518-6
           http://mpqs.free.fr/LucasPseudoprimes.pdf

    r   é@B r   r   r   rS   r   Fé   z=appropriate value for D cannot be found in is_selfridge_prp())rj   rV   ry   rI   r   )r   ru   rU   s      r   Ú_is_selfridge_prprƒ   ì  sº   € õ4 �1�i Ñ#Ô#ð 
ð 
ˆØˆq‰5ð 	Ø�ˆAÝ�1�a‰LŒLˆØ�Š7ˆ7Ý" 1 a¨!¨A©#°!©°Q¸±UÑ;Ô;¸AÔ>À!ÒCÐCÐCÐCØ�Š6ˆ6�a˜!‘eˆ6Ø�5�5à�Š7ˆ7•y ‘|”|ˆ7Ø�5�5øÝ
ÐTÑ
UÔ
UÐUr   c                 óx   — | dk     rt          d¦  «        ‚| dk    rdS | dz  dk    r| dk    S t          | ¦  «        S )Nr   ú1is_selfridge_prp() requires 'n' be greater than 0Fr   r   )r   rƒ   r8   s    r   Úis_selfridge_prpr†     sL   € Øˆ1‚u€uÝÐLÑMÔMÐMØˆA‚v€vØˆuØˆ1�u�‚z€zØ�AŠvˆÝ˜QÑÔÐr   c                 óü  — |dz  d|z  z
  }|dk    rt          d¦  «        ‚| dk     rt          d¦  «        ‚| dk    rdS | dz  dk    r| dk    S t          | ||z  ¦  «        d| fvrt          d¦  «        ‚t          || ¦  «        }t          | |z
  ¦  «        }t	          | ||| |z
  |z	  ¦  «        \  }}}|dk    s|dk    rd	S t          |dz
  ¦  «        D ]*}	||z  d|z  z
  | z  }|dk    r d	S t          |d| ¦  «        }Œ+dS )
Nr   rS   r   z/invalid values for p,q in is_strong_lucas_prp()r   r…   Fz0is_strong_lucas_prp() requires gcd(n,2*q*D) == 1T)r   rT   rV   r   ry   rj   rK   )
r   r   r@   ru   rU   r4   rv   rw   rx   rk   s
             r   Úis_strong_lucas_prprˆ     s;  € Ø	ˆ1‰ˆq�‰s‰
€AØˆA‚v€vÝÐJÑKÔKÐKØˆ1‚u€uÝÐLÑMÔMÐMØˆA‚v€vØˆuØˆ1�u�‚z€zØ�AŠvˆÝ
ˆ1ˆa�‰c�{„{˜1˜a˜&Ð Ð ÝÐKÑLÔLÐLÝˆq�!‰Œ€AÝ�!�a‘%ÑÔ€AÝ˜q ! Q¨¨Q©°1©Ñ5Ô5�H€A€qˆ"ØˆA‚v€v��a’�ØˆtÝ�1�q‘5‰\Œ\ð ð ˆØˆq‰S�1�R‘4‰Z˜1ÑˆØ�Š6ˆ6Ø�4�4Ý��Q˜‰]Œ]ˆˆØˆ5r   c                 óØ  — t          ddd¦  «        D ]Ê}|dz  r| }t          || ¦  «        }|dk    r„t          | dz   ¦  «        }t          | dd|z
  dz  | dz   |z	  ¦  «        \  }}}|dk    s|dk    r dS t          |dz
  ¦  «        D ]+}||z  d|z  z
  | z  }|dk    r  dS t	          |d| ¦  «        }Œ, d	S |dk    r|| z  r d	S |d
k    rt          | ¦  «        r d	S ŒËt          d¦  «        ‚)Nr   r�   r   r   r   rS   r   TFr‚   zDappropriate value for D cannot be found in is_strong_selfridge_prp())rj   rV   r   ry   rK   rI   r   )r   ru   rU   r4   rv   rw   rx   rk   s           r   Ú_is_strong_selfridge_prprŠ   7  s3  € Ý�1�i Ñ#Ô#ð ð ˆØˆq‰5ð 	Ø�ˆAÝ�1�a‰LŒLˆØ�Š7ˆ7Ý˜!˜a™%Ñ Ô ˆAÝ& q¨!¨a°©c°a©Z¸!¸a¹%ÀA¹ÑFÔF‰HˆAˆq�"Ø�AŠvˆv˜˜aš˜Ø�t�tÝ˜1˜q™5‘\”\ð #ð #�Ø�q‘S˜1˜R™4‘Z 1Ñ$�Ø˜’6�6Ø˜4˜4˜4Ý˜˜Q ‘]”]��Ø�5�5Ø�Š6ˆ6�a˜!‘eˆ6Ø�5�5à�Š7ˆ7•y ‘|”|ˆ7Ø�5�5øÝ
Ð[Ñ
\Ô
\Ð\r   c                 óx   — | dk     rt          d¦  «        ‚| dk    rdS | dz  dk    r| dk    S t          | ¦  «        S )Nr   z8is_strong_selfridge_prp() requires 'n' be greater than 0Fr   r   )r   rŠ   r8   s    r   Úis_strong_selfridge_prprŒ   O  sL   € Øˆ1‚u€uÝÐSÑTÔTÐTØˆA‚v€vØˆuØˆ1�u�‚z€zØ�AŠvˆÝ# AÑ&Ô&Ð&r   c                 ó˜   — | dk     rt          d¦  «        ‚| dk    rdS | dz  dk    r| dk    S t          | d¦  «        ot          | ¦  «        S )Nr   z,is_bpsw_prp() requires 'n' be greater than 0Fr   r   )r   rl   rƒ   r8   s    r   Úis_bpsw_prprŽ   Y  s\   € Øˆ1‚u€uÝÐGÑHÔHÐHØˆA‚v€vØˆuØˆ1�u�‚z€zØ�AŠvˆÝ˜!˜QÑÔÐ8Õ$5°aÑ$8Ô$8Ð8r   c                 ó˜   — | dk     rt          d¦  «        ‚| dk    rdS | dz  dk    r| dk    S t          | d¦  «        ot          | ¦  «        S )Nr   z3is_strong_bpsw_prp() requires 'n' be greater than 0Fr   r   )r   rl   rŠ   r8   s    r   Úis_strong_bpsw_prpr�   c  s\   € Øˆ1‚u€uÝÐNÑOÔOÐOØˆA‚v€vØˆuØˆ1�u�‚z€zØ�AŠvˆÝ˜!˜QÑÔÐ?Õ$<¸QÑ$?Ô$?Ð?r   )r   )%r]   Úmpmath.libmpÚlibmpr*   r
   rj   rU   r   r   r'   r-   r0   r3   rT   Úlcmr9   rB   rI   rM   rO   rV   rY   rc   rf   rh   rl   rn   ry   r}   r   rƒ   r†   rˆ   rŠ   rŒ   rŽ   r�   r7   r   r   ú<module>r”      sU  ðð €€€à Ð Ð Ð Ð Ð ð �#˜‘)€Ø	ˆˆq�!‰Œð Cð C€AØ/0¨c°Q¸1¸q¹5±\Ñ.B€O�A˜‘FÐ*˜a A¨¡E™lÐ*Ñ+Ð+ð)ð )ð )ð )ð@&ð &ð &ð &ðð ð ð8"ð "ð "ð
#ð #ð #ð
ð ð ð „h€Ø
„h€ðð ð ð'ð 'ð 'ð*!(ð !(ð !(ðH>ð >ð >ðð ð ð ð ð ð0ð ð ð+ð +ð +ð\!ð !ð !ð1ð 1ð 1ðð ð ð ð  ð  ð|ð |ð |ð~
3ð 
3ð 
3ð>ð >ð >ð%Vð %Vð %VðP ð  ð  ðð ð ð2]ð ]ð ]ð0'ð 'ð 'ð9ð 9ð 9ð@ð @ð @ð @ð @r   