View Full Version : [C] Aiuto sviluppo Miller-Rabin
salve a tutti,
qualcuno potrebbe darmi una mano, una spiegazione "terra terra" di questo algoritmo? Ho inserito la dicitura del linguaggio C perchč dovrei creare un programma in quel linguaggio, ma in primis mi servirebbe capire che cribio fanno le parti di questo algo. Grazie in anticipo.
Input: n > 2, an odd integer to be tested for primality;
k, a parameter that determines the accuracy of the test
Output: composite if n is composite, otherwise probably prime
write n − 1 as 2s·d with d odd by factoring powers of 2 from n − 1
LOOP: repeat k times:
pick a randomly in the range [2, n − 1]
x ← ad mod n
if x = 1 or x = n − 1 then do next LOOP
for r = 1 .. s − 1
x ← x2 mod n
if x = 1 then return composite
if x = n − 1 then do next LOOP
return composite
return probably prime
bancodeipugni
12-12-2013, 14:59
salve a tutti,
qualcuno potrebbe darmi una mano, una spiegazione "terra terra" di questo algoritmo? Ho inserito la dicitura del linguaggio C perchč dovrei creare un programma in quel linguaggio, ma in primis mi servirebbe capire che cribio fanno le parti di questo algo. Grazie in anticipo.
Input: n > 2, an odd integer to be tested for primality;
k, a parameter that determines the accuracy of the test
Output: composite if n is composite, otherwise probably prime
write n − 1 as 2s·d with d odd by factoring powers of 2 from n − 1
LOOP: repeat k times:
pick a randomly in the range [2, n − 1]
x ← ad mod n
if x = 1 or x = n − 1 then do next LOOP
for r = 1 .. s − 1
x ← x2 mod n
if x = 1 then return composite
if x = n − 1 then do next LOOP
return composite
return probably prime
potevano anche scrivere un testo in italiano
devi creare un filtro che in input riceve un intero dispari maggiore di 2 e verificare che sia un numero primo k un parametro indicatore dell'accuratezza del test
in uscita il programma deve saper dire se il numero č composto oppure probabilmente primo
scrivere n − 1 come 2s·d con d dispari della potenza del 2 -1 .... ma che cazzo č s ???
quindi:
ciclo da ripetere k volte (usa il for)
scegli un random nel range da 2 a n-1
x ← ad mod n ma che cazzo č ?? ad chi ??? devi fare una operazione di mod ... forse x mod n boh...
se x = 1 or x = n − 1 prosegui il ciclo altrimenti esci
altro ciclo
for r = 1 .. s − 1
x ← x2 mod n anche qui cazzo č ? x2 sarā xquadro penso...
se x = 1 allora esci con numero composto
altrimenti se x = n − 1 allora ripeti il primo ciclo (ti conviene fare una funzione e indicare globale qualcosa)
esci con composto
esci con probabile primo :mbe:
mah... sei sicuro che il testo ci sia tutto ?
la pagina da dove l'ho preso riportava la fonte come la pagina di wikipedia... ma ora che ci sono andato ed ho visto meglio, č lievemente diverso lo pseudocodice:
Input: n > 3, an odd integer to be tested for primality;
Input: k, a parameter that determines the accuracy of the test
Output: composite if n is composite, otherwise probably prime
write n − 1 as (2^s) ·d with d odd by factoring powers of 2 from n − 1
WitnessLoop: repeat k times:
pick a random integer a in the range [2, n − 2]
x ← a^d mod n
if x = 1 or x = n − 1 then do next WitnessLoop
repeat s − 1 times:
x ← x^2 mod n
if x = 1 then return composite
if x = n − 1 then do next WitnessLoop
return composite
return probably prime
PS: Si č un test sulla primalitā, in quanto stabilisce che vi č una buona probabilitā che quel numero sia primo, ma non dā la certezza al 100%, e quindi tutto il mondo informatico si basa su congetture e statistiche... xD
PPS: copia/incollando non ha preso le potenze come "a^d", ergo mi ha scritto "ad" ecc ecc, mea culpa D:
bancodeipugni
12-12-2013, 15:57
ah ecco
x= a^d mod n
x = x^2 mod n
x sarebbe da mettere globale per lasciare withnessloop come procedura, altrimenti č da passare x e da ritornare
resta comunque il mistero di chi sia s
http://it.wikipedia.org/wiki/Test_di_Miller-Rabin
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.