l'ho scritto e poi ho iniziato a modificare delle parti per rendere l'esecuzione più veloce... sono riuscito a sistemare tutto tranne l'ultimo passaggio, dove decifra... in effetti quello è il passagio in cui impiega più tempo, avete qualche idea di come snellire quel calcolo?
Codice: Seleziona tutto
INPUT primo_a,primo_b,messaggio
LET t=TIME
LET decodifica_d=(primo_a-1)*(primo_b-1)
LET quadrante_n=primo_a*primo_b
LET k=1
DO UNTIL n=1
LET k=k+1
LET m=decodifica_d
LET n=k
DO WHILE m>0
IF n>m THEN
LET n=k
LET n=m
LET m=k
END IF
!altro algoritmo per MCD, preso da basecinque
LET m=MOD(m,n)
!LET m=m-n
LOOP
LOOP
LET codifica_e=k
LET code=MOD( (messaggio^codifica_e) , quadrante_n )
!LET x=1
!LET r=2
!DO UNTIL r=1
! LET x=x+1
! LET r=MOD( (x*codifica_e) , decodifica_d )
!loop
!LET d_inverso=x
!mio algoritmo: riduce il tempo di questo passaggio
LET x=1
LET d=1
DO UNTIL d=0
LET d_inverso=(x*decodifica_d+1)/codifica_e
LET d=d_inverso-INT(d_inverso)
LET x=x+1
loop
LET codice=code
LET rr=0
LET risp=codice
LET risposta=1
IF MOD( d_inverso , 2 ) = 1 THEN
LET risposta=MOD(risposta*risp,quadrante_n)
LET d_inverso=d_inverso-1
END IF
!LET d_inverso=d_inverso-(INT(d_inverso/decodifica_d)*decodifica_d)
PRINT d_inverso,decodifica_d
DO UNTIL rr=d_inverso
LET rr=rr+2
LET risposta=MOD(risposta*risp*risp,quadrante_n)
LOOP
LET tempo=TIME - t
IF tempo=0 THEN
LET efficenza=-1
END IF
IF tempo>0 THEN
LET efficenza=(tempo*100)/quadrante_n
End if
PRINT "codice:"
PRINT code
PRINT "decodifica:"
PRINT risposta
PRINT "totale dati"
PRINT quadrante_n
PRINT "tempo totale(s)"
PRINT tempo
PRINT "efficenza: (tempo su 100 dati)"
PRINT efficenza
END