9.lekcija kursā

“Datu aizsardzība un kriptogrāfija”

 

Pirmskaitļu pazīšana

 

Problēma: dots samērā liels naturāls skaitlis (piem.: 16785927812143), jānosaka vai tas ir pirmskaitlis vai nav. Kā to darīt?

Teorētiķi. Ja neizdodas noteikt ar determinētu Tjūringa mašīnu, tad mēģina noteikt ar nedeterminētu.

Ja vēlas pierādīt, ka dotais naturālais skaitlis nav pirmskaitlis, tad jāuzmin kādu skaitli, ar kuru izdalot nav atlikuma. Tjūringa mašīna tādu skaitli uzmin.

Varbūtisks algoritms

Varbūtisks algoritms – algoritms, kuram var pateikt ar kādu varbūtību tas novedīs pie noteikta rezultāta.

Varbūtisks algoritms rēķina kongruences

Ja p ir noteikta veida, tad eksistē atrisināšanas algoritms, pārējos gadījumos nevar zināt.

Ko parasti dara, ja kāds saka, ka skaitlis ir pirmskaitlis:

    1. Pārbauda vai nav pāra skaitlis
    2. Pārbauda vai nedalās ar 5
    3. Pārbauda vai nedalās ar 3
    4. U.c. skolā mācītas lietas

Ja nav pāra skaitlis un pēdējais cipars nav 5, tad izmanto Fermā mazo teorēmu no skaitļu teorijas:

Eilera teorēma,

patvaļīgi ņemtam m fii no(m)<p-1.(m- salikts skaitlis) un tad, parasti,

Tāpēc ir ļoti labs algoritms (jāteic gan bezatbildīgs): izvēlas kādu a, viegli rēķināmu, uzceļ pakāpē m-1 un skatās vai iznāk.

Piem: 103 ir vai nav pirmskaitlis?

Ar 2 un 5 nedalās.

m-1=102, ņem

un pārbauda vai tas kongruents ar 1(mod 103)?

Ko mēs uzzinājām? Neko. Ja nebūtu 1, tad zinātu, ka 103 nav pirmskaitlis, bet tagad nevar zināt.

Ko saka šajā ziņā teorija?

Def: Mēs teiksim, ka a ir liecinieks tam, ka m nav pirmskaitlis, ja

Pretējā gadījumā a ir liecinieks tam, ka m ir pirmskaitlis.

T: Vai nu visi skaitļi a, kas ir savstarpēji pirmskaitļi ar m, vai ne vairāk par pusi no visiem skaitļiem, kas ir savstarpēji pirmskaitļi ar m, var būt liecinieki tam, ka m ir pirmskaitlis.

Kārmaikla ( Carmichael ) skaitļi.

1729, 294409, 56052361, . . .

Visi Kārmaikla skaitļi uzrakstāmi formā:

(6*j+1)*(12*j+1)*(18*j+1)

1729 pie j=1

294409 pie j=6

56052361 pie j=35

Šie Kārmaikla skaitļi nav pirmskaitļi, bet tai pašā laikā katrs a, kurš ir savstarpējs pirmskaitlis ar Kārmaikla skaitli, liecina, ka pēdējais ir pirmskaitlis.

Tātad nekur tālu neesam tikuši, kaut gan no otras puses, ir ļoti maza varbūtība, ka izvēlētais skaitlis būs Kārmaikla skaitlis.

T: Ja m ir nepāru pirmskaitlis, tad visiem a,

T: Ja m ir nepāru salikts skaitlis, tad vismaz vienai pusei no visiem a ir spēkā

Ko dara Varbūtiskais algoritms?

Ņem a robežās aĪ [2, m-1] tā, lai ar vienādu varbūtību trāpītu jebkuram no a.

No nejaušā a, ja ir kongruents , tad neko daudz neesam uzzinājuši, ja nav kongruents, tad m ir salikts skaitlis.

Ņem nākošo a, tad ja ir kongruents, tad ar varbūtību ¼, m varētu būt pirmskaitlis.

Un tātad, ja kaut pie viena a nav kongruents, tad m ir salikts skaitlis, respektīvi, nav pirmskaitlis.

Piem: Vai 2777 ir pirmskaitlis?

Ņem aĪ [2,2776] Kā sadalīs pirmreizinātājos? Eiklīda algoritms.

Meklē (2777,15)

2777=15*185+2

15=2*7+1

2=1*2+0

(2777,15)=1 tātad tie ir savstarpēji pirmskaitļi.

Mūs interesē vai

te

 

ir Jakobi simbols un kā to meklē ir apskatīts lekcijā Nr6.

Tātad iegūstam, ka

 

Mūs interesē vai

 

Tātad 2777 nav salikts skaitlis. Bet ticamība, ka tas ir pirmskaitlis ½

Pie kādas tad varbūtības ticēt, ka tas ir pirmskaitlis ?

 

Kvadrātsaknes pēc moduļa p.

Algoritms.

Let p be an odd prime, and aĪ Z. Write

 with q odd. This algorithm, either outputs an x such that

or says that such

an x does not exist (i.e. that a is a quadratic non-residue mod p)

  1. (Find generator) Choose numbers n at random until
  2. Then set

  3. (Initialize) Set
  4. (Find exponent) If

    , output x and terminate the algorithm. Otherwise, find the smallest m≥1 such that
  5. If m=r, output a message saying that a is not a quadratic residue mod p.

  6. (Reduce exponent) Set

(all operations done module p) and go to step 3.