§
    «³Ùg�B  ã                   óŠ  — d dl Z 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        dd…         dk    rej        Zej        Znd dlm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%„ 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         úL/granary/edev/quantum/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   1   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'   5   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-   Q   s    € å�tŒy�˜Q™œÑ Ô Ñ!Ô!Ð!r   c                 ó^   — t          t          j        t          | ¦  «        ¦  «        ¦  «        S )zInteger square root of x.)r)   r*   Úisqrtr,   s    r   Úsqrtr0   V   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   [   s2   € åŒ<�˜A™œÑÔ�D€A€qÝ�‰FŒF•C˜‘F”FÐÐr   r   )é   é	   ©Úreducec                  ó8   — t          t          j        | d¦  «        S )zgcd of multiple integers.r   )r9   ÚmathÚgcd©Úargss    r   r<   r<   k   s   € å•d”h  aÑ(Ô(Ð(r   c                  ó2   — d| v rdS t          d„ | d¦  «        S )zlcm of multiple integers.r   c                 ó8   — | |z  t          j        | |¦  «        z  S )N)r;   r<   ©r   r#   s     r   ú<lambda>zlcm.<locals>.<lambda>t   s   €  1 Q¡3­¬°°A©¬Ñ#6€ r   r   r8   r=   s    r   ÚlcmrC   p   s&   € à�ˆ9ˆ9Ø�1ÝÐ6Ð6¸¸aÑ@Ô@Ð@r   c                 ó    — | dk     rd|  fS d| fS )Nr   r   r   © ©r   s    r   Ú_signrG   w   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	   rG   r   )Úar!   ÚgÚx_signÚy_signr   r5   r#   r4   ÚqÚcs              r   ÚgcdextrP   }   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_squarerW   ’   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   ÚZeroDivisionErrorrV   s     r   Úinvertr[   ¶   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   rY   rA   s     r   Úlegendrer]   Ä   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   ©r6   r   é   r6   )r   r)   r<   )r   r#   Újs      r   Újacobirb   Ô   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   r_   )r<   r	   r   rb   )r   r#   Úsignr4   s       r   Ú	kroneckerre   ì   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 positiverI   Tr   )r   Fg      ð?g      à?é5   g       @l           r   )	r   r*   r3   r)   r   ÚOverflowErrorr;   Úlog2r	   )	r#   r   r   r$   ÚguessÚexpÚshiftÚxprevr   s	            r   Úirootrn   û   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   r<   rY   ©r   rJ   s     r   Úis_fermat_prprq   )  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   r<   rY   rb   rp   s     r   Úis_euler_prprs   8  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   rY   Úrange)r   rJ   r4   Ú_s       r   Ú_is_strong_prprw   G  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   r<   rw   rp   s     r   Úis_strong_prpry   U  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   r`   r   r6   NÚ1r   )Úbin)	r   ÚPÚQÚkÚDÚUÚVÚQkr!   s	            r   Ú_lucas_sequencer„   d  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   r`   r   )r   r   z,invalid values for p,q in is_fibonacci_prp()r   z1is_fibonacci_prp() requires 'n' be greater than 0F)r   r„   ©r   r   rN   Ú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   r`   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   r<   r„   rb   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   r`   r   Fé   z=appropriate value for D cannot be found in is_selfridge_prp())ru   rb   r„   rW   r   )r   r€   ra   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Ž   rF   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   r`   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   r<   rb   r   r„   ru   rY   )
r   r   rN   r€   ra   r4   r�   r‚   rƒ   rv   s
             r   Úis_strong_lucas_prpr“   1  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   r`   r   TFr�   zDappropriate value for D cannot be found in is_strong_selfridge_prp())ru   rb   r   r„   rY   rW   r   )r   r€   ra   r4   r�   r‚   rƒ   rv   s           r   Ú_is_strong_selfridge_prpr•   J  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•   rF   s    r   Úis_strong_selfridge_prpr—   b  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   rw   rŽ   rF   s    r   Úis_bpsw_prpr™   l  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   rw   r•   rF   s    r   Úis_strong_bpsw_prpr›   v  s\   € Øˆ1‚u€uÝÐNÑOÔOÐOØˆA‚v€vØˆuØˆ1�u�‚z€zØ�AŠvˆÝ˜!˜QÑÔÐ?Õ$<¸QÑ$?Ô$?Ð?r   )r   ))Úsysr;   Úmpmath.libmpÚlibmpr*   r
   ru   ra   r   r   r'   r-   r0   r3   Úversion_infor<   rC   Ú	functoolsr9   rG   rP   rW   r[   r]   rb   re   rn   rq   rs   rw   ry   r„   rˆ   rŠ   rŽ   r‘   r“   r•   r—   r™   r›   rE   r   r   ú<module>r¡      s¬  ðð €
€
€
Ø €€€à Ð Ð Ð Ð Ð ð �#˜‘)€Ø	ˆˆq�!‰Œð Cð C€AØ/0¨c°Q¸1¸q¹5±\Ñ.B€O�A˜‘FÐ*˜a A¨¡E™lÐ*Ñ+Ð+ð)ð )ð )ð )ð@&ð &ð &ð &ðð ð ð8"ð "ð "ð
#ð #ð #ð
ð ð ð Ô�B�Q�BÔ˜6Ò!Ð!à
Œ(€CØ
Œ(€C€Cð !Ð Ð Ð Ð Ð ð)ð )ð )ð
Að Að Aðð ð ð'ð 'ð 'ð*!(ð !(ð !(ðH>ð >ð >ðð ð ð ð ð ð0ð ð ð+ð +ð +ð\!ð !ð !ð1ð 1ð 1ðð ð ð ð  ð  ð|ð |ð |ð~
3ð 
3ð 
3ð>ð >ð >ð%Vð %Vð %VðP ð  ð  ðð ð ð2]ð ]ð ]ð0'ð 'ð 'ð9ð 9ð 9ð@ð @ð @ð @ð @r   