Primality Testing、Miller Rabin Algorithm
Primality Testing
Determine whether a given large number is prime, traditionally sieve using trial division.
Two properties of prime numbers:
- property 1
if p is prime and a is a positive integer with a<p,
a^2 mod p =1 if and only if a mod p =1 or a mod p =-1 mod p =p-1
- property 2
Miller Rabin Algorithm
Test(n) :
- find integers k , q with k>0 , q odd, so that (n-1)=2^k *q
- select a random integer a, 1<a<n-1
- if a^q mod n =1 then return ('inconclusive')
- for j=0 to k-1 do
- if (a^((2^j)*q)) mod n =n-1) then return("inconclusive")
- return ("composite")
example 1:
Test n=29
29-1 = 2^2 * 7, thus k=2, q=7
a^q mod n= 2^7 mod 29 = 12!=1!=29-1
then 12^2=144 mod 29=28= 29-1
test returns "inconclusive"(propaly prime)
example 2:
Test n=2047 a=2
2047-1 = 2046= 2^1 * 1023, thus k=1 , q=1023
a^q mod n= 2^1023 mod 2047= 1
2^1=2
2^2= 4
2^4=16
2^8=256
2^16=65536 = 32 (mod 2047)
2^32=1024
2^64=512 (mod 2047)
2^128=128 (mod 2047)
2^256= 8 (mod 2047)
2^512=64
2^1023=2^(512+256+128+64+32+16+8+4+2+1)
=64*8*128*512*1024*32*256*16*4*2 (mod 2047)
=8*256 mod 2047
=1 mod 2047
總結: 2^1023 mod 2047= 這類計算化簡,不管mod 前面數有多大都要化簡到2047的最小倍數然後得出其餘數