Cipollas algoritm är en teknik för att lösa en kongruent formekvation
där , så n blir kvadraten av x , och där är ett udda primtal . Här betecknar ett sista fält med element . Algoritmen är uppkallad efter den italienske matematikern Michele Cipolla , som upptäckte metoden 1907.
Ingång:
Utgång:
Steg 1. Hitta ett tal så att det inte är en kvadrat. En algoritm för att hitta sådana siffror är inte känd, förutom genom försök och misstag . Vi väljer bara ett tal och beräknar Legendre-symbolen för att säkerställa att den uppfyller villkoret. Chansen att ett slumptal matchar är . Om det är tillräckligt stort är detta värde ungefär lika med [1] . Det förväntade antalet försök att få ett lämpligt a är alltså 2.
Steg 2. Få x genom att räkna i fältet . Detta tal x kommer att vara en av rötterna till ekvationen
Om , då gäller också. Eftersom p är udda, så för den hittade lösningen x finns det alltid en andra lösning lika med -x .
( Obs : Alla element upp till det andra steget tillhör fältet och alla element i det andra steget tillhör fältet ). Vi letar efter ett antal x sådana att
Innan du tillämpar algoritmen måste du kontrollera att talet faktiskt är en kvadrat i fältet , vilket betyder att Legendre-symbolen måste vara lika med 1. Du kan kontrollera detta med Euler-kriteriet : . Detta bekräftar att 10 är en kvadrat och algoritmen kan appliceras på den.
Således är en lösning, liksom Indeed and
I den första delen av beviset verifierar vi att det verkligen är ett fält. För att förenkla beräkningarna introducerar vi ett tal lika med . Naturligtvis är inte en kvadratisk rest, så kvadratroten finns inte i . Detta kan, grovt sett, betraktas som en analog till det komplexa talet i . Aritmetiken för fältet är ganska uppenbar. Tillägg definieras som
.Multiplikation definieras också på vanligt sätt. Kommer vi ihåg det så får vi det
.Nu måste vi kontrollera fältets egenskaper. Stängning under operationerna addition och multiplikation, associativitet , kommutativitet och distributivitet är lätt att verifiera, eftersom fältet liknar fältet för komplexa tal (där det fungerar som en analog till i ). Det neutrala elementet genom addition är eller, mer formellt, om , då
Det neutrala elementet genom multiplikation är , mer exakt :
.Det återstår bara att kontrollera att det finns inversa element under addition och multiplikation. Det är lätt att se att inversen av tillägget av ett tal är talet , som också finns i fältet , eftersom . För att visa att alla element som inte är noll har ett element inverst i multiplikation, skriver vi ut representationerna och . Med andra ord,
.Vi får två ekvationer, och . Vi löser detta system med avseende på och , vi får
, .De omvända elementen i uttrycken för och existerar eftersom de är element i fältet . Detta avslutar den första delen av beviset.
I den andra delen av beviset kommer vi att visa det för alla element . Per definition är inte en kvadrat i . Då ger Eulerkriteriet
.Alltså ,. Detta, tillsammans med Fermats lilla sats (som anger att för alla ) och kunskapen om att i fält med karakteristisk , visar det önskade resultatet
.Den tredje och sista delen av bevisningen visar att i målet .
Beräkna
Observera att dessa beräkningar sker i , så . Lagranges teorem säger att ett polynom som inte är noll av grad n har högst n rötter över ett fält K. Med tanke på att polynomet har 2 rötter i , kan det inte finnas några andra rötter . Det har visat sig att och är rötter till polynomet i , så . [2]
Efter att ha hittat ett lämpligt a är antalet operationer som krävs av algoritmen multiplikationer och additioner, där m är antalet siffror i den binära representationen av talet p och k är antalet ettor i denna representation. För att hitta en genom försök och misstag är det förväntade antalet beräkningar av Legendre-symbolen 2. Du kan dock ha tur första gången, men det kan ta mer än 2 försök. Följande två likheter gäller i fältet
var är känt i förväg. Denna beräkning kräver 4 multiplikationer och 4 additioner.
var och . Denna operation kräver 6 multiplikationer och 4 additioner.
Om vi antar att (i fallet med , är direkt beräkning mycket snabbare) det binära uttrycket har tecken, varav k är lika med ett. För att beräkna potensen av ett tal måste den första formeln användas en gång och den andra en gång.
Cipolla-algoritmen är bättre än Tonelli-Shanks-algoritmen om och bara om , där är den maximala effekten av 2 som är delbar med [3] .
Talteoretiska algoritmer | |
---|---|
Enkelhetstest | |
Hitta primtal | |
Faktorisering | |
Diskret logaritm | |
Hitta GCD | |
Modulo aritmetik | |
Multiplikation och division av tal | |
Beräkna kvadratroten |