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: