Carmichael 3 strong pseudoprimes: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 2,037: | Line 2,037: | ||
func carmichael3(p1) |
func carmichael3(p1) |
||
if isprime(p1) = 0 return ok |
if isprime(p1) = 0 return ok |
||
for h3 = 1 to p1 -1 |
for h3 = 1 to p1 -1 |
||
t1 = (h3 + p1) * (p1 -1) |
t1 = (h3 + p1) * (p1 -1) |
||
t2 = (-p1 * p1) % h3 |
t2 = (-p1 * p1) % h3 |
||
if t2 < 0 |
if t2 < 0 |
||
t2 = t2 + h3 |
t2 = t2 + h3 |
||
ok |
ok |
||
for d = 1 to h3 + p1 -1 |
for d = 1 to h3 + p1 -1 |
||
if t1 % d = 0 and t2 = (d % h3) |
if t1 % d = 0 and t2 = (d % h3) |
||
p2 = 1 + (t1 / d) |
p2 = 1 + (t1 / d) |
||
if isprime(p2) = 0 |
if isprime(p2) = 0 |
||
loop |
loop |
||
ok |
ok |
||
p3 = 1 + floor((p1 * p2 / h3)) |
p3 = 1 + floor((p1 * p2 / h3)) |
||
if isprime(p3) = 0 or ((p2 * p3) % (p1 -1)) != 1 |
if isprime(p3) = 0 or ((p2 * p3) % (p1 -1)) != 1 |
||
loop |
loop |
||
ok |
ok |
||
see "" + p1 + " " + p2 + " " + p3 + " " + p1*p2*p3 + nl |
see "" + p1 + " " + p2 + " " + p3 + " " + p1*p2*p3 + nl |
||
ok |
ok |
||
next |
next |
||
next |
next |
||
func isprime(num) |
func isprime(num) |
||
if (num <= 1) return 0 ok |
if (num <= 1) return 0 ok |
||
if (num % 2 = 0) and num != 2 |
if (num % 2 = 0) and num != 2 |
||
return 0 |
return 0 |
||
ok |
ok |
||
for i = 3 to floor(num / 2) -1 step 2 |
for i = 3 to floor(num / 2) -1 step 2 |
||
if (num % i = 0) |
if (num % i = 0) |
||
return 0 |
return 0 |
||
ok |
ok |
||
next |
next |
||
return 1 |
return 1 |
||
</lang> |
</lang> |
||
Output: |
Output: |