Chernick's Carmichael numbers: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) 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}}== |