| |
|
|
p.specht
| Leidlich erprobt a ca. N = 92,000,000 y todavía algo langsam, como en reinem XProfan-11. Eingabe de -1 stößt incluso einzuprogrammierende Gruppenausgabe a (Mit -2 Yo mich a el Gültigkeitsgrenze herangetastet).
Título de la ventana "Statistischer Miller-Rabin Primzahltest"
' (CL) CopyLeft 2018-05 P.Pájaro carpintero, Wien; Ohne jede Gewähr!
Windowstyle 24:font 2:set("decimals",17)
Declarar w$,x!,y!,m!,n!
Repeat
imprimir "\n Primzahltest [Gruppe = -1]: ";
input w$ :caso w$="-2":w$="90000103"'todavía korrekt
'Testprime "10,000,007" no mehr erkannt!
if w$>90000103
imprimir " *** ZUVERLÄSSIGKEIT sinkt de 90,000,000 ! ***"
sound 100,100':continue
endif
caso w$="-1":Romper
n!=val(w$)
locate %csrlin-1,50:imprimir " MillerRabin_7: ";
imprimir if(MillerRabin(n!),"PRIMZAHL","NICHT prim.")
Until %key=27
Cls:set("decimals",0)
declarar Anz&,Von!,Bis!,Lauf!
Von!=90000000'
Bis!=90000500'a ca. 90,000,000
caso Bis!>100000000:imprimir "\n Lange Dauer esperar! \n"
Lauf!=Von!+(remodf(de!,2)=0)
REPEAT
if MillerRabin(Lauf!)
imprimir Lauf!,
inc Anz&
endif
Lauf!=Lauf!+2
UNTIL Lauf!>(Bis!+1)
imprimir "\n Anzahl: ",Anz&
'Check: 2871 Primes de 20000 a 50000
'Check: 764 Primes de 520000 a 530000
'Check: 658 Primes de 5020000 a 5030000
'Check: 577 Primes de 50020000 a 50030000
beep:sound 2000,200
waitinput
End
proc MillerRabin :parámetros n!
caso n!<2:volver 0
caso n!<>intf(n!):volver 0
caso n!<4:volver 1
casenot remodf(n!,2):volver 0
declarar s&,d!,x!,res&
s&=0
d!=n!-1
whilenot remodf(d!,2)
d!=d!/2
inc s&
endwhile
res&=1
WHILELOOP 7
x! = modpotf(2+intf(rnd()*(n!-3)),d!,n!)
Case (x!=1) O (x!=n!-1):continue
whileloop s&-1,1,-1
x!=remodf(sqr(x!),n!)
if x!=1:res&=0:Romper:endif
if x!=n!-1:res&=2:Romper:endif
endwhile
caso res&=0:romper
if res&=2:res&=1:continue:endif
caso x!=n!-1:continue
res&=0
ENDWHILE
volver res&
ENDPROC
Proc modpotf :parámetros x!,y!,m!
var pot! = 1
mientras que y!>0
if remodf(y!,2)=1
pot!=remodf(pot!*x!,m!)
y!=y!-1
más
x!=remodf(sqr(x!),m!)
y!=y!/2
endif
endwhile
volver pot!
ENDPROC
proc floor :parámetros x!
caso abs(x!)<(10^-35):volver 0
caso x!>0:volver intf(x!)
volver (abs(x!-intf(x!)) < 10^-35)-intf(abs(x!-1))
ENDPROC
proc remodf :parámetros x!,y!
' Q: https://de.wikipedia.org/wiki/Modulo , como en ADA
caso abs(x!)<(10^-35):volver 0
caso abs(y!)<(10^-35):volver x!
volver ((x!>0)-(x!<0))*abs(x!-y!*floor(x!/y!))
ENDPROC
proc frac :parámetros x!
var s!=(x!>0)-(x!<0)
x!=abs(x!)
x!=x!-round(x!,0)
caso x!<0:x!=1+x!
volver s!*x!
ENDPROC
proc intf :parámetros x!
var s!=(x!>0)-(x!<0)
x!=abs(x!)
x!=x!-frac(x!)
volver s!*x!
ENDPROC
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 27.05.2021 ▲ |
|
|
|