
    sg$                         d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZmZ d Zd Zd Zd	 Zd
 Zed        Z d Z!d Z"d Z#d Z$d Z%d Z&y)    )gcd)Sievesieve)mr_lucas_extrastrong_paramsis_lucas_prp	is_squareis_strong_lucas_prpis_extra_strong_lucas_prp
proth_testisprimeis_euler_pseudoprimeis_gaussian_primeis_fermat_pseudoprimeis_euler_jacobi_pseudoprimeMERSENNE_PRIME_EXPONENTS_lucas_lehmer_primality_testis_mersenne_prime)slowraises)IFloatc                  <    t        dd      sJ t        dd      sJ y )N      	   )r        U/var/www/html/venv/lib/python3.12/site-packages/sympy/ntheory/tests/test_primetest.pytest_is_fermat_pseudoprimer       s"     A&&& A&&&r   c                     t        dd      sJ t        dd      sJ t        dd      sJ t        dd      sJ t        dd	      sJ t        d
d      sJ t        t        d        t        t        d        t        t        d        g d} | D ]  }t        |d      rJ  g d} | D ]  }t        |d      rJ  g d}|D ]1  }t        d|      D ]   }t	        ||      dk7  rt        ||      r J  3 y )N   r            e      i  
   i,  )   c                      t        dd      S )Nr      r   r   r   r   <lambda>z)test_euler_pseudoprimes.<locals>.<lambda>       3Aq9 r   c                      t        dd      S )N   r   r,   r   r   r   r-   z)test_euler_pseudoprimes.<locals>.<lambda>   r.   r   c                      t        dd      S )Nr#   r%   r,   r   r   r   r-   z)test_euler_pseudoprimes.<locals>.<lambda>   s    3B: r   )U  i1  iQ    iq    	      I  iU  i     i!!  i(  Y)     )y     r3   c  i    i     "  r:   s0  ia<  =  @  !I  K  [  iU`  iim  r0   )r3   r5   rC   iQ  iA  ia& iaz i1 i i) iu )r   r   
ValueErrorranger   )	euler_prppabsolute_euler_prpas       r   test_euler_pseudoprimesrN      s   A&&&A&&&A&&&Q'''b)))r***
:9:
:9:
::;CI *#Aq)))*PI *#Aq)))*B .q! 	.A1ayA~'1---	..r   c                  <    t        dd      sJ t        dd      sJ y )N   r   r#   )r   r   r   r    test_is_euler_jacobi_pseudoprimerQ   6   s"    &r1---&r1---r   c                      t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      d	k(  sJ t        d
      dk(  sJ t        d      dk(  sJ y )Nr0   )r   r0   r   r   )   r+   r   r'   r   )r   r   r   rP   )   r   r   ;   )    r%   r   i  )u   rP   r   )r   r   r   r   test_lucas_extrastrong_paramsrX   ;   s    $Q'9444$Q':555$Q'9444$Q'9444$R(J666$R(J666$S)\999r   c                      t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ y )	Nr+   F  T}*  r         )r   r   r   r   test_is_extra_strong_lucas_prpr^   E   st    $Q'5000$S)T111$U+t333$Q'5000$R(E111$S)U222r   c                     t        dd      D  cg c]  } | dz  rt        |       s|  }} t        |      dk(  sJ |D  cg c]  } t        | dg      s|  c} g dk(  sJ |D  cg c]  } t        | dg      s|  c} g dk(  sJ |D  cg c]  } t        | dg      s|  c} g d	k(  sJ t	        d
 |D              rJ |D  cg c]  } t        |       s|  c} g dk(  sJ |D  cg c]  } t        |       s|  c} g dk(  sJ |D  cg c]  } t        |       s|  c} g dk(  sJ y c c} w c c} w c c} w c c} w c c} w c c} w c c} w )Nr   順 r;   iny)r4   r6   r7   r8   r9   rC   ir  i/  i  i  i  i# i: iM i%Y ib r0   )r<   r=   r>   r?   r@   rA   r:   rB   rD   rE   rF   rG   i{  i  ]  i  i  ia# i4 iQB iiW iY i} E  )1r         1   A   Q   rb   r2   iW  i  iu  i  ie  i  i  r7   r8   iM  i  iu  i3  rA   rB   iq2  i:  i>  i1N  iV  iZ  iI`  iaa  ia|  i+  ig  iͨ  i  ra   iy  ie  i  iY  i  i  i  i i i+ iI2 iwO c              3   6   K   | ]  }t        |d g        yw)l   j_| N)r   ).0ns     r   	<genexpr>ztest_prps.<locals>.<genexpr>a   s     GA2a-./Gs   )9iC  iy  i  i%  i  S    io#  i#  r[   i,  i-  i_6  i9  >  iS?  iG  J  icJ  W  io[  _  ob  ie  ie  ij  i  i  i  铘  i#  i	  u  iC  i  i  i  i  i  i    i  i  i    E% i- i6 i7 i'D iI i/P i` iq iz | )rl   rm   r[   rn   ro   rp   rq   rr   rt   ru   rx   ry   )rZ   i  rm   r[   iCm  is  ix  i{  rs   rv   rw   rx   )rI   r   sumr   anyr   r
   r   )rj   oddcompositess     r   	test_prpsr}   M   s    %a "1	Agaj  "M " }+++$3!1qc
A3 89 9 9 9 %3!1qc
A3 82 2 2 2 %5!1seA5 :    GGGGG$8!QA8 =9 9 9 9 %?!(;A(>A? D    % !(A!(DA   =" 4 4 6 9 @sL   D'D,D,#D16D1D6D6D;D;$E 5E EEc                      g d} g d}t        d      D ],  | v rt              |v k(  rJ t        t        fd       . y )N)r0   r   r   r"   r$   rc   !   r)   re   9   rf   rg   a   q                  )r0   r   r"   r$   r)   r   r   r      c                      t               S )N)r   )rj   s   r   r-   z!test_proth_test.<locals>.<lambda>~   s    z!} r   )rI   r   r   rH   )A080075A080076rj   s     @r   test_proth_testr   s   sL    5G /G3Z 6<a=Q'\222:45	6r   c                  f    t        j                  dd      D ]  } t        |       | t        v k(  rJ  y )Nr0   d   )r   
primeranger   r   )rK   s    r    test_lucas_lehmer_primality_testr      s9    a% R+A.18P3PQQQRr   c                      t        d      du sJ t        d      du sJ t        d      du sJ t        d      du sJ t        d      du sJ t        d      du sJ t        d	      du sJ y )
NFr0   Tr(      i  i i)r   r   r   r   test_is_mersenne_primer      s    R E)))Q4'''R E)))S!T)))S!U***V$,,,Z(D000r   c                      t               } | j                  d       t        | j                  dd            }t	        d      D ]  }||v t        |      k(  rJ  t        d      sJ t        d      sJ t        d      sJ t        d      sJ t        d      sJ t        d	      sJ t        d
      sJ t        d      sJ t        d      sJ t        t        d            sJ t        d      sJ t        ddz  dz
        sJ t        ddz  dz
        sJ t        ddz  dz
        rJ t        d      rJ t        d      rJ t        d      rJ t        d      rJ t        d      rJ t        d      rJ t        d      rJ t        d      rJ t        t        d            rJ t        t        d            rJ t        j                  d       t        d      sJ t        d      rJ t        t        d         t        t        d!        y )"Nr`   r;   i iͱ
l   {! l   \)l   yW-	l   GPFQw8 l   XFqb l   Ii|	3mV&> l   :_sh1S3b l	   #:gWj#0[ z
531137992816767098689588206552468627329593117727031923199444138200403559860852242739162502265229285668889329486246501015346579337652707239409519978766587351943831270835393219031728127l    Y   r   i_  iY  l   ;n>l   pl   He%Z	 l   y5D( l   --	l   q.;m l   7y_@I7 l   k$9H"YaR  
8038374574536394912570796143419421081388376882875581458374889175222974273765333652186502336163960045457915042023603208766569966760987284043965408232928738791850869166857328267761771029389697739470167082304286871099974399765441448453411558724506334092790222752962294149842306881685404326457534018329786111298960644845216191652872597534901a  
2887148238050771212671429597130393991977609459279722700926516024197432303799152733116328983144639225941977803110929349655578418949441740933805615113979999421542416933972905423711002751042080134966731755152859226962916775325475044445856101949404200039904432116776619949629539250452698719329070373564032273701278453899126120309244841494728976885406024976768122077071687938121709811322297802059565867i  i  is  c                      t        d      S )Ng       @)r   r   r   r   r-   ztest_isprime.<locals>.<lambda>   s
    ws| r   c                  *    t        t        d            S )Nr;   )r   r   r   r   r   r-   ztest_isprime.<locals>.<lambda>   s    wuQx0 r   )
r   extendsetr   rI   r   intr   r   rH   )spsrj   s      r   test_isprimer      sA   AHHV	Q\\!V$	%B6] 'RGAJ&&&' 9;=!!!=!!!'(((,---01115666:;;;3 1 2 3 3 3 91b5191c6A:q#vz"""
 }%%%}%%%'''*+++'(((/000/0005666
 s A B C C C s 8 9 : : : 
LL4==t}
:+,
:01r   c                      t        d      D  cg c]  } t        |       s|  c} g dk(  sJ t        d      rJ t        d      rJ t        d      rJ t        d      rJ t        d      rJ y c c} w )Nrc   )r   r   r+   r   r\   iK i <Y.l    @7Zkl   ,3;, i ^ )rI   r	   )is    r   test_is_squarer      sv    Ry1!IaLA15EEEE !!!!!!!!!""""""" 2s
   A/A/c                      t        dt        z        sJ t        d      sJ t        ddt        z  z         sJ t        ddt        z  z         rJ y )Nr'   r;   r0   )r   r   r   r   r   test_is_gaussianprimer      sQ    QqS!!!QQ1W%%% QqS))))r   N)'mathr   sympy.ntheory.generater   r   sympy.ntheory.primetestr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   sympy.testing.pytestr   r   sympy.core.numbersr   r   r    rN   rQ   rX   r^   r}   r   r   r   r   r   r   r   r   r   <module>r      s|     /8 8 8 8 8 . ''
.D.
:3 " "J6R
1E2P#*r   