Chernick's Carmichael numbers: Difference between revisions

Content added Content deleted
m (→‎{{header|Perl 6}}: simplify, tidy)
(Added Go)
Line 48: Line 48:


* [https://oeis.org/A318646 OEIS A318646: The least Chernick's "universal form" Carmichael number with n prime factors]
* [https://oeis.org/A318646 OEIS A318646: The least Chernick's "universal form" Carmichael number with n prime factors]

=={{header|Go}}==
<lang go>package main

import (
"fmt"
"math/big"
)

var (
zero = new(big.Int)
prod = new(big.Int)
fact = new(big.Int)
)

func ccFactors(n, m uint64) (*big.Int, bool) {
prod.SetUint64(6*m + 1)
if !prod.ProbablyPrime(10) {
return zero, false
}
fact.SetUint64(12*m + 1)
if !fact.ProbablyPrime(10) {
return zero, false
}
prod.Mul(prod, fact)
for i := uint64(1); i <= n-2; i++ {
fact.SetUint64((1<<i)*9*m + 1)
if !fact.ProbablyPrime(10) {
return zero, false
}
prod.Mul(prod, fact)
}
return prod, true
}

func ccNumbers(start, end uint64) {
for n := start; n <= end; n++ {
m := uint64(1)
if n > 4 {
m = 1 << (n - 4)
}
for {
num, ok := ccFactors(n, m)
if ok {
fmt.Printf("a(%d) = %d\n", n, num)
break
}
if n <= 4 {
m++
} else {
m += 1 << (n - 4)
}
}
}
}

func main() {
ccNumbers(3, 9)
}</lang>

{{out}}
<pre>
a(3) = 1729
a(4) = 63973
a(5) = 26641259752490421121
a(6) = 1457836374916028334162241
a(7) = 24541683183872873851606952966798288052977151461406721
a(8) = 53487697914261966820654105730041031613370337776541835775672321
a(9) = 58571442634534443082821160508299574798027946748324125518533225605795841
</pre>


=={{header|Perl}}==
=={{header|Perl}}==