Category : BASIC Source Code
Archive   : UBAS830.ZIP
Filename : APRT-CLE.UB

 
Output of file : APRT-CLE.UB contained in archive : UBAS830.ZIP



J˜ "APRT-CLE" is the extended version of "APRT-CL"
˜ Cohen-Lenstra version of Adleman-Pomerance-Rumely Test
È(˜ programmed by Koichiro Akiyama
÷2˜ 1988 2 12
<˜
?F˜ modified for UBASIC version 7 by Yuji KIDA
tP˜ 1989 1 31 & 1989 3 30
ªZ˜ amended by Frank O'Hara
Ùd˜ 1990 1 28
!n˜ extended to 844 digits using extra memories by Yuji KIDA
Px˜ 1991 9 30
ž‚˜ extended to 844 digits WITHOUT using extra memories by Frank O'Hara
ÎŒ˜ 1991 12 13
–˜ rearranged by Yuji KIDA
2 ˜ 1992 1 24
;ª˜
F´ŸÞñÈ
ˆ¾NPmaxÑñÀPWmaxÑñ ÀPWmax1сPWmaxÞñÀ Prms32767Ññ¸

¤ÈNQmaxÑñˆÀQmaxÑñ!v
¸ÒLEVELmaxÑñ
Øܤ‚IndxQmax)‚FQmax)
#椂PNPmax)‚QmemNQmax)‚QNQmax)‚GNQmax)‚InvPWmax1)
Yð¤‚NPLEVELmax)‚NQLEVELmax)„TLEVELmax)
‰ú¤„JSPWmax1)„JWPWmax1)„JXPWmax1)
¹¤„J0PWmax1)„J1PWmax1)„J2PWmax1)
Ѥ„JñPWmax1)
Ú˜©
÷"§"Test number N="ÁƒN
,ÙƒNÔñŽ¿
6¨€š
@˜ë
3Jˆõ GetAllPrimes÷
LTˆõGetPrimes2Testé÷
e^[LEVELnowÑÞñŽ
ŒhÀ™À™"This number is too large."À¿
•r˜d
°|™À™"Preparatory test"
†ƒWруN)
ᐍ°ƒWуNŽõYesPrime
ÿšÎƒWÖðŽõ
FindFactor0
¤™" Pass !"Á
®˜ 
3¸˜ Main test
<˜
OÌõ MainStart
cÖ‰IÑñŠNP
wàPтPI)
ê¨SWTestedQs
°ô™À™À™"Main test for P="ÁP
ÂþÁPÒñŽ
òÀÁ€ÚƒNPÞñPïñ)ÖñŽSWÑñ
‰JсTestedQsÝñŠ TestingQs
;ƒQтQJ)ÀGтGJ)
d&Kѳõ
PowerIndex/÷(PƒQÞñ)
w0FKÑðŽñø
:™" for Q="ÁƒQÁ
ØDPKсPïKÀPLÑ(PÞñ)åPï(KÞñ)ÀPMсPï(KÞñ)
ðNˆõ
GetIndexTableÎ÷
Xˆõ
GetFxTable÷
b˜Ý
'lˆõPrepareJacobisø
PvˆõCalcJacobiPQVsø˜ J(v,p,q)
„€ˆõ
CalcJPQ0uJPQV´÷˜S J(0,p,q)^u*J(v,p,q)
¸ŠHѳõ MatchingRoot™÷˜‡ J = zeta^H%
Ý”¬HÑÞñŽ”‰Â‰À‡õNotPrimeÓ
枘µ
û¨ÊSWÑñŽñø
 ²âHçPÑðŽñø
2 ¼PÖñŽSWÑñÀ‡ñø
G ƍKÖñŽñä
j ЍƒNçñÑñŽSWÑñÀ‡ñø
t Ú‡ñø
´ 䍀ڃQÂ(ƒNÞñ)èñƒN)փNÞñŽ”‰Â‰À‡õNotPrime
 îSWÑñ
Í øŒJ

ÒSWÑðŽTestedQsс TestingQsÀ‡õ
TestMoreQs


ŒI

‡õFinal
'
˜
;
*õ
TestMoreQs
`
4 TestingQsԂNQLEVELnow)Ž
p
>À™"retry"Á
™
HÀ  TestingQsÀƒQтQ TestingQs)
Ê
RÀƒUуTÀ’ƒSåуQÀƒUуUèƒQ“£
Õ
\À‡ñ
Ý
f”‰
pLEVELnowсLEVELmaxŽõ
CannotTell
, z™"retry from the beginning"Á
g „ LEVELnowÀƒTфTLEVELnow)ÀNPтNPLEVELnow)
u ŽƒSÑñ
” ˜‰JÑñŠ‚NQLEVELnow)
¨ ¢ƒQтQJ)
Ø ¬ƒUуTÀ’ƒSåуQÀƒUуUèƒQ“£
 ¶ƒSïñ҃NŽ TestingQsсJÀ”‰À‡õ MainStart
 ÀŒ
4 Ê™"Program error !"À–À¿
= Ô˜
L ÞõFinal
e èƒWѳõ FinalTest’ö
” òc€çTñԃWƒWԃN}Žõ
FindFactor
 ü˜l
¯ õYesPrime
 ™" Pass !"
Û ™À™ƒNÁ"is prime."
é $‡õEnda
ò .˜

8õNotPrime

B™À™" Fail !"
6
L™À™ƒNÁ"is not prime."
D
V‡õEnda
M
`˜
a
jõ
FindFactor
t
t™" Fail !"

~™À™ƒNÁ"is a multiple of"ÁƒWÁ"."
«
ˆ‡õEnda
´
’˜
È
ϛ
CannotTell
Û
¦™" Fail !"
ñ
°™À™"I'm sorry !"
/º™" I can't tell whether this number is prime or not."
KÄ™À™"test number="ÁƒN
nΙÀ™"Please try another test."
|؇õEnd
…â˜
’ìõEnd
›ö™€š
¢¿
«
˜
Áõ GetAllPrimes
쉁IÑñŠNPmaxÀ‚PI)р΁I)ÀŒ
(NQallÑñÀ‚Qmemñ)Ññ
:2ƒTÑñïñåñïñåñïñåñåñ åñ

S<ˆõGetallQs]ö(ƒT)
‚F TestingQsÑñÀ‚Qñ)ÑñÀ‚Gñ)Ññ
©P„Tñ)ÑñïñåñÀ‚NPñ)Ññ
ÚZˆõGetQsGsö(„Tñ))À‚NQñ)с TestingQs
d„Tñ)ÑñïñåñåñÀ‚NPñ)Ññ
6nˆõGetQsGsö(„Tñ))À‚NQñ)с TestingQs
ex„Tñ)ÑñïñåñïñåñÀ‚NPñ)Ññ
–‚ˆõGetQsGsö(„Tñ))À‚NQñ)с TestingQs
ÉŒ„Tñ)ÑñïñåñïñåñåñÀ‚NPñ)Ññ
ú–ˆõGetQsGsö(„Tñ))À‚NQñ)с TestingQs
- „Tñ)ÑñïñåñïñåñåñÀ‚NPñ)Ññ
^ªˆõGetQsGsö(„Tñ))À‚NQñ)с TestingQs
‘´„Tñ)ÑñïñåñïñåñåñÀ‚NPñ)Ññ
¾ˆõGetQsGsö(„Tñ))À‚NQñ)с TestingQs
õÈ„Tñ)ÑñïñåñïñåñåñÀ‚NPñ)Ññ
&ÒˆõGetQsGsö(„Tñ))À‚NQñ)с TestingQs
]Ü„Tñ)Ññïñåñïñåñåñåñ À‚NPñ)Ññ
ŽæˆõGetQsGsö(„Tñ))À‚NQñ)с TestingQs
Éð„Tñ )Ññïñåñïñåñïñåñåñ À‚NPñ )Ññ
úúˆõGetQsGSö(„Tñ ))À‚NQñ )с TestingQs
5„Tñ
)Ññïñåñïñåñïñåñåñ À‚NPñ
)Ññ
fˆõGetQsGsö(„Tñ
))À‚NQñ
)с TestingQs
µ„Tñ )Ññïñåñïñåñïñåñåñ åñ
À‚NPñ )ÑñÀ˜„ 11=LEVELmax%
æ"ˆõGetQsGsö(„Tñ ))À‚NQñ )с TestingQs
í,•
ö6˜
@õGetPrimes2Test
(J‰IÑñŠLEVELmax
6TƒSÑñ
O^‰JÑñŠ‚NQI)
ch ƒQтQJ)
˜r ƒUфTI)À’ÿÿƒSåуQÀƒUуUèƒQ“J!£
¯| å!ƒSïñ҃NŽ
Ö† ÀLEVELnowсIÀ TestingQsсJ
 ÀƒTфTLEVELnow)ÀNPтNPLEVELnow)
š À”‰Â‰À‡ñÂ
¤Œ
$®Œ
I¸LEVELnowÑÞñÀ˜ too big
P•
Y̘
qÖõPrepareJacobis
‰à¢„J0ðÁPKÞñ)Ñð
¡ê¢„J1ðÁPKÞñ)Ñð
³ô¨"PÒñŽ
ÑþÀˆõ JacobiSum¬ö(ñÂñ)
ÙÀ•
썻"KÑñŽ•
õ˜Ä"
&ˆõ JacobiSum¬ö(ñÂñ)
*0¢„JWðÁPKÞñ)Ñð
=:KÑñŽ•
FD˜
mN¢„JWðÁPMÞñ)Ñ¢„J0ðÁPMÞñ)
ŠXˆõ JacobiSum¬ö(ñÂñ)
±b¢„JSðÁPMÞñ)Ñ¢„J0ðÁPMÞñ)
ÑlˆõJS_JWØõˆõ NormalizeJSJ÷
øv¢„J1ðÁPMÞñ)Ñ¢„JSðÁPMÞñ)
/€ˆõ JacobiSum¬ö(ñåñï(KÞñ)Âñï(KÞñ))
GŠ¢„JWðÁPKÞñ)Ñð
n”¢„JSðÁPMÞñ)Ñ¢„J0ðÁPMÞñ)
žˆõJS_2£õˆõ NormalizeJSJ÷
´¨¢„J2ðÁPMÞñ)Ñ¢„JSðÁPMÞñ)
»²•
ļ˜
òƘ J(p,q,v) ( J(v,i) )
ûИ
ÚõCalcJacobiPQVs
亁I
>JðÃñÂñÁPKÞñ)Ñð
Uø¢„JðÃñÂð)Ññ
iVKуNçPK
ƒ ˆõGetInverseTable8ø
˜g%PÑñŽñò
© ‰IVÑðŠñ
Á*‰XÑñŠPKÞñ
è4 ¢„JSðÁPKÞñ)Ñ¢„J0ðÁPKÞñ)
> Ï%XçPÑðŽñÔ
H í%IVÑðŽƒEсXÀ‡ñf
9R ƒEÑ(VKåX)èPK
L\ &ƒEÑðŽñÔ
[f ˆõJS_E‰õ
sp ¢„JWðÁPKÞñ)Ñð
Šz InvXтInvX)
 „ ‰IÑðŠPKÞñ
½Ž SÑ(IåInvX)çPK
ט „JWS)ÝфJSI)
Þ¢ Œ
ô¬ ˆõ NormalizeJWd÷
¶ ¢„JSðÁPKÞñ)Ñ¢„JIVÂðÁPKÞñ)
0À ˆõJS_JWØõ
\Ê ¢„JIVÂðÁPKÞñ)Ñ¢„JSðÁPKÞñ)
cԌ
jތ
qè•
¡òp'KÑñŽ„JðÂð)уQÀ„JñÂð)ÑñÀ•
¶ü…'KÒñŽñÄ
¿ ˜È'
ð ˜ J(2,q,v) k=2 ( J(v,i) )
ù ˜
$ VKÑñŽ„JñÂð)Ññ
*. ‰IÑðŠñ
C8 „JSI)фJ0I)
JB Œ
YL ˆõJS_2£õ
nV VKÖñŽñ~
` ‰IÑðŠñ
œj „JñI)фJSI)
£t Œ
´~ ‰IÑðŠñ
Ôˆ „JðI)фJSI)åƒQ
Û’ Œ
✠•
ë¦ ˜
° ˜ J(2,q,v) k>2 ( J(v,i) )
%º ˜
6Ä ‰IVÑðŠñ
RÎ ‰XÑñŠPKÞñ‹ñ
qØ ¢„JSðÁPM)Ñ¢„J1ðÁPM)
œ⠍€èXçñÑñXçñÑñ}Žñ‚
µì IVÑðŽƒEсX
Ôö ÀƒEÑ(VKåX)èPK
è
ÀƒEÑðŽñ‚
÷

ˆõJS_E‰õ

¢„JWðÁPKÞñ)Ñð
&
InvXтInvX)
<(
‰IÑðŠPKÞñ
Y2
SÑ(IåInvX)çPK
s<
„JWS)ÝфJSI)
zF
Œ
P
ˆõ NormalizeJWd÷
¼Z
¢„JSðÁPKÞñ)Ñ¢„JIVÂðÁPKÞñ)
Òd
ˆõ NormalizeJSJ÷
ân
ˆõJS_JWØõ
x
¢„JIVÂðÁPKÞñ)Ñ¢„JSðÁPKÞñ)
‚
ŒX
KŒ
€èIVÑðVKçñÑñVKçñÑñ}ŽñÒ
c–
¢„JWðÁPKÞñ)Ñð
{ 
¢„JSðÁPKÞñ)Ñð
¢ª
¢„JWðÁPMÞñ)Ñ¢„J2ðÁPMÞñ)
δ
¢„JSðÁPMÞñ)Ñ¢„JIVÂðÁPMÞñ)
Þ¾
ˆõJS_JW

¢„JIVÂðÁPMÞñ)Ñ¢„JSðÁPMÞñ)
Ò
ŒIV
Ü

%æ

Fð
˜ J(0,p,q)^u*J(v,p,q)
Oú

f õ
CalcJPQ0uJPQV
v ºIJ
Ž ¢„JSðÁPKÞñ)Ñð
¢" ƒUуNèPK
Ë, ¢„JSðÁPLÞñ)Ñ¢„JðÂðÁPLÞñ)
ä6 ƒEуUÀˆõJS_E‰õ
ü@ ¢„JWðÁPKÞñ)Ñð
 J ‰IÑðŠPLÞñ
( T ‰JÑðŠPLÞñ
C ^ SÑ(I݁J)çPK
{ h „JWS)Ñ(„JWS)݄JSI)å„JñJ))çƒN
‚ r Œ
‰ | Œ
Ÿ † ˆõ NormalizeJWd÷
µ  ‰IÑðŠPLÞñ
Ê š „JWI)çуN
Ñ ¤ Œ
Ø ® •
á ¸ ˜
ø Â ³õ MatchingRoot
!Ì ºIJHÑÞñ
!Ö ƒWÑð
4!à ‰IÑðŠPLÞñ
I!ê ƒWÝфJWI)
P!ô Œ
b!þ {.ƒWÑñŽ
y! À‰IÑðŠPLÞñ
¤!
Às.„JWI)ÑñŽHсIÀ”‰À‡ñž À—
¬! ÀŒ
µ!& ˜„.
ç!0 ¶.ƒWÖ(ƒNÞñ)å(PÞñ)ŽHÑÞñÀ‡ñž
ý!: ‰IÑðŠPMÞñ
"D ï.„JWI)уNÞñŽ”‰À‡ñl
'"N Œ
;"X HÑÞñÀ‡ñž
D"b ˜
\"l ‰JÑñŠPÞñ
u"v SсI݁JåPM
¢"€ q/„JWS)փNÞñŽHÑÞñÀ”‰À‡ñž
©"Š Œ
Ý"” HсI݁PLÀ˜¬/ =i%+(P%-1)*P%^(K%-1)
ê"ž •(H)
ó"¨ ˜
#² ³õ FinalTest
&#¼ ºIJT1T2ƒR
4#Æ ƒRÑñ
U#Ð T1уTèñ'ÀT2уTçñ'
i#Ú ‰IÑñŠT1
|#ä ‰JÑñŠñ'
•#î ƒRуRåƒNçƒS
°#ø ƒRÑñŽ”‰Â‰À‡ñ\

Ý#
€çƒNçƒRÑðƒRԃN}Ž”‰Â‰À‡ñ\

ä#

ë#

ÿ#
‰IÑñŠT2
$*
ƒRуRåƒNçƒS
1$4
1ƒRÑñŽ”‰À‡ñ\

\$>
+1€ç#1ƒNçƒRÑðƒRԃN}Ž”‰À‡ñ\

c$H

q$R
ƒRÑñ
~$\
•(ƒR)
‡$f

¾$p
˜ table of index x=G%^Indx%(x)@Q
Ç$z

Þ$„

GetIndexTable
é$Ž
ºI
÷$˜
WÑñ
%¢
‰IÑñŠƒQÞñ
(%¬
WсWåGçƒQ
>%¶
‚IndxW)сI
E%À

L%Ê

U%Ô

Œ%Þ
˜ table of F(x) G%^F%(x)=1-G%^x
•%è

©%ò

GetFxTable
´%ü
ºI
Â%WÑñ
Ú%‰IÑñŠƒQÞñ
ó%WсWåGçƒQ
&$‚FI)тIndx(ñށW)çƒQ)
&.Œ
'&8•
0&B˜
H&L˜ Jacobi sum
Q&V˜
o&`õ JacobiSum(AB)
„&jºIJK
œ&t¢„J0ðÁPLÞñ)Ñð
´&~‰IÑñŠƒQÞñ
Þ&ˆJÑ(AåI݁Bå‚FI))çPK
û&’Ô3JԁPLŽ „J0J)
.'œÀý3‰KÑñŠPÞñÀ¡„J0JށKåPM)ÀŒ
5'¦Œ
<'°•
E'º˜
†'Ę table of inverses mod P^k Inv%(x)*x@PK% = 1
'Θ
¨'ØõGetInverseTable
³'⺁I
Ë'쉁IÑñŠPKÞñ
(öÇ4IçPŽ‚InvI)рہIPK)Ó4‚InvI)Ñð
(Œ
(
•
(˜
0(˜ JS=JS^E
9((˜
G(2õJS_E
R(<ºI
g(F65ƒEÑñŽñ‚
Ž(P¢„JWðÁPLÞñ)Ñ¢„JSðÁPLÞñ)
¬(Z‰IрƒE)ÞñŠð‹Þñ
»(dˆõJS_2£õ
Û(nª5€ÃIƒE)ŽˆõJS_JWØõ
â(xŒ
é(‚•
ò(Œ˜
)–˜ JS=JS*JW
) ˜
)ªõJS_JW
5)´ºIJK
K)¾‰IÑðŠPLÞñ
a)ȉJÑðŠPLÞñ
|)Ò KÑ(I݁J)çPK
°)Ü „JXK)Ñ(„JXK)݄JSI)å„JWJ))çƒN
·)æŒ
¾)ðŒ
å)ú¢„JSðÁPKÞñ)Ñ¢„JXðÁPKÞñ)
ý)¢„JXðÁPKÞñ)Ñð
*ˆõ NormalizeJSJ÷
*•
#*"˜
8*,˜ JS=JS^2
A*6˜
O*@õJS_2
d*JºIJK
z*T‰IÑðŠPLÞñ
’*^KÑñåIçPK
À*h„JXK)Ñ(„JXK)݄JSI)ïñ)çƒN
Ç*rŒ
Ý*|‰IÑðŠPLÞñ
ú*†‰JсIÝñŠPLÞñ
+ KÑ(I݁J)çPK
M+š „JXK)Ñ(„JXK)Ýñå„JSI)å„JSJ))çƒN
T+¤Œ
[+®Œ
‚+¸¢„JSðÁPKÞñ)Ñ¢„JXðÁPKÞñ)
š+¢„JXðÁPKÞñ)Ñð
°+̈õ NormalizeJSJ÷
·+Ö•
À+à˜
é+ê˜ normalize coefficient of JS
ò+ô˜
,þõ NormalizeJS
,ºIJ
0,‰IсPLŠPKÞñ
Q,r9„JSI)ŽƒJWфJSI)
j,& À‰JÑñŠPÞñ
Š,0 À„JSIށJåPM)ÞуJW
’,: ÀŒ
£,D À¨„JSI)
ª,NŒ
±,X•
º,b˜
ã,l˜ normalize coefficient of JW
ì,v˜
-€õ NormalizeJW
-ŠºIJ
*-”‰IсPLŠPKÞñ
K-žl:„JWI)ŽƒJWфJWI)
d-¨ À‰JÑñŠPÞñ
„-² À„JWIށJåPM)ÞуJW
Œ-¼ ÀŒ
-Æ À¨„JWI)
¤-ÐŒ
«-Ú•
´-ä˜
Ï-î˜GENSHI version 1.4
æ-ø³õGenshi(ƒP)
.ºƒGenÑñƒNуPÞñƒNwƒDivSW
. ’ÿÿ
<. ƒGenÀƒNwуNÀSWÑñ
E. ’ÿÿ
X.* ƒDivруNw)
ˆ.4 ’ÿÿÀƒNwуNwèƒDivÀ“0;£ÀƒNwуNwåƒDivÝ£
½.> Œ;€ÚƒGenƒNèƒDivƒP)ÑñŽSWÑðÀƒNwÑñ
Î.H“;ƒNwÑñ
Û.R“ì:SW
é.\•(ƒGen)
ò.f˜
/põGetAllQs(ƒT)
/zºIƒQ
5/„‰IÑñŠ Prms32767
G/ŽƒQр΁I)
b/˜T<ƒTç(ƒQÞñ)ÑðŽ
…/¢ À NQallÀ‚QmemNQall)уQ
Œ/¬Œ
“/¶•
œ/À˜
³/ÊõGetQsGs(ƒT)
Ã/ÔºIƒQ
Ú/Þ‰IÑñŠNQall
ð/èƒQтQmemI)
0òF=€çå<ƒQÖðƒTç(ƒQÞñ)Ñð}Ž
*0ü À  TestingQs
w0 À‚Q TestingQs)уQÀ‚G TestingQs)ѳõGenshióõ(ƒQ)À‚QmemI)Ñð
~0Œ
…0•
Ž0$˜
®0.³õ
PowerIndex(PƒX)
¾08ºKÑÞñ
ß0B’ÿÿ KÀƒXуXèP“–=£
ì0L•(K)


  3 Responses to “Category : BASIC Source Code
Archive   : UBAS830.ZIP
Filename : APRT-CLE.UB

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/