Sexy primes: Difference between revisions

Content deleted Content added
Thundergnat (talk | contribs)
m →‎{{header|Perl 6}}: bleh. fix whitespace
PureFox (talk | contribs)
→‎{{header|Go}}: Revised version in line with change in task requirements. Other changes to make code more general and printing more concise.
Line 88: Line 88:
import "fmt"
import "fmt"


func sieve(limit uint64) []bool {
func sieve(limit int) []bool {
limit++
limit++
// True denotes composite, false denotes prime.
// True denotes composite, false denotes prime.
Line 95: Line 95:
c[1] = true
c[1] = true
// no need to bother with even numbers over 2 for this task
// no need to bother with even numbers over 2 for this task
p := uint64(3) // Start from 3.
p := 3 // Start from 3.
for {
for {
p2 := p * p
p2 := p * p
Line 129: Line 129:
}
}


func minOf(a, b int) int {
func printHelper(cat string, le, lim, max int) (int, int, string) {
cle, clim := commatize(le), commatize(lim)
if a < b {
return a
if cat != "unsexy primes" {
cat = "sexy prime " + cat
}
}
fmt.Printf("Number of %s less than %s = %s\n", cat, clim, cle)
return b
last := max
if le < last {
last = le
}
verb := "are"
if last == 1 {
verb = "is"
}
return le, last, verb
}
}


func main() {
func main() {
// sieve up to 1 million
lim := 1000035
sv := sieve(1e6)
sv := sieve(lim - 1)
var pairs [][2]int
var pairs [][2]int
var trips [][3]int
var trips [][3]int
Line 144: Line 154:
var quins [][5]int
var quins [][5]int
var unsexy = []int{2, 3}
var unsexy = []int{2, 3}
for i := 3; i < 1e6; i += 2 {
for i := 3; i < lim; i += 2 {
if i > 5 && i < 999994 && !sv[i] && sv[i-6] && sv[i+6] {
if i > 5 && i < lim-6 && !sv[i] && sv[i-6] && sv[i+6] {
unsexy = append(unsexy, i)
unsexy = append(unsexy, i)
continue
continue
}
}
if i < 999994 && !sv[i] && !sv[i+6] {
if i < lim-6 && !sv[i] && !sv[i+6] {
pair := [2]int{i, i + 6}
pair := [2]int{i, i + 6}
pairs = append(pairs, pair)
pairs = append(pairs, pair)
Line 155: Line 165:
continue
continue
}
}
if i < 999988 && !sv[i+12] {
if i < lim-12 && !sv[i+12] {
trip := [3]int{i, i + 6, i + 12}
trip := [3]int{i, i + 6, i + 12}
trips = append(trips, trip)
trips = append(trips, trip)
Line 161: Line 171:
continue
continue
}
}
if i < 999982 && !sv[i+18] {
if i < lim-18 && !sv[i+18] {
quad := [4]int{i, i + 6, i + 12, i + 18}
quad := [4]int{i, i + 6, i + 12, i + 18}
quads = append(quads, quad)
quads = append(quads, quad)
Line 167: Line 177:
continue
continue
}
}
if i < 999976 && !sv[i+24] {
if i < lim-24 && !sv[i+24] {
quin := [5]int{i, i + 6, i + 12, i + 18, i + 24}
quin := [5]int{i, i + 6, i + 12, i + 18, i + 24}
quins = append(quins, quin)
quins = append(quins, quin)
}
}
}
}
le := len(pairs)
le, n, verb := printHelper("pairs", len(pairs), lim, 5)
fmt.Println("Number of sexy prime pairs less than 1,000,000 =", commatize(le))
fmt.Printf("The last %d %s:\n %v\n\n", n, verb, pairs[le-n:])
n := minOf(le, 5)
fmt.Println("The last", n, "is/are:\n ", pairs[le-n:], "\n")


le = len(trips)
le, n, verb = printHelper("triplets", len(trips), lim, 5)
fmt.Println("Number of sexy prime triplets less than 1,000,000 =", commatize(le))
fmt.Printf("The last %d %s:\n %v\n\n", n, verb, trips[le-n:])
n = minOf(le, 5)
fmt.Println("The last", n, "is/are:\n ", trips[le-n:], "\n")


le = len(quads)
le, n, verb = printHelper("quadruplets", len(quads), lim, 5)
fmt.Println("Number of sexy prime quadruplets less than 1,000,000 =", commatize(le))
fmt.Printf("The last %d %s:\n %v\n\n", n, verb, quads[le-n:])
n = minOf(le, 5)
fmt.Println("The last", n, "is/are:\n ", quads[le-n:], "\n")


le = len(quins)
le, n, verb = printHelper("quintuplets", len(quins), lim, 5)
fmt.Println("Number of sexy prime quintuplets less than 1,000,000 =", commatize(le))
fmt.Printf("The last %d %s:\n %v\n\n", n, verb, quins[le-n:])
n = minOf(le, 5)
fmt.Println("The last", n, "is/are:\n ", quins[le-n:], "\n")


le = len(unsexy)
le, n, verb = printHelper("unsexy primes", len(unsexy), lim, 10)
fmt.Println("Number of unsexy primes less than 1,000,000 =", commatize(le))
fmt.Printf("The last %d %s:\n %v\n\n", n, verb, unsexy[le-n:])
n = minOf(le, 10)
fmt.Println("The last", n, "is/are:\n ", unsexy[le-n:])
}</lang>
}</lang>


{{out}}
{{out}}
<pre>
<pre>
Number of sexy prime pairs less than 1,000,000 = 16,386
Number of sexy prime pairs less than 1,000,035 = 16,386
The last 5 is/are:
The last 5 are:
[[999371 999377] [999431 999437] [999721 999727] [999763 999769] [999953 999959]]
[[999371 999377] [999431 999437] [999721 999727] [999763 999769] [999953 999959]]


Number of sexy prime triplets less than 1,000,000 = 2,900
Number of sexy prime triplets less than 1,000,035 = 2,900
The last 5 is/are:
The last 5 are:
[[997427 997433 997439] [997541 997547 997553] [998071 998077 998083] [998617 998623 998629] [998737 998743 998749]]
[[997427 997433 997439] [997541 997547 997553] [998071 998077 998083] [998617 998623 998629] [998737 998743 998749]]


Number of sexy prime quadruplets less than 1,000,000 = 325
Number of sexy prime quadruplets less than 1,000,035 = 325
The last 5 is/are:
The last 5 are:
[[977351 977357 977363 977369] [983771 983777 983783 983789] [986131 986137 986143 986149] [990371 990377 990383 990389] [997091 997097 997103 997109]]
[[977351 977357 977363 977369] [983771 983777 983783 983789] [986131 986137 986143 986149] [990371 990377 990383 990389] [997091 997097 997103 997109]]


Number of sexy prime quintuplets less than 1,000,000 = 1
Number of sexy prime quintuplets less than 1,000,035 = 1
The last 1 is/are:
The last 1 is:
[[5 11 17 23 29]]
[[5 11 17 23 29]]


Number of unsexy primes less than 1,000,000 = 48,626
Number of unsexy primes less than 1,000,035 = 48,627
The last 10 is/are:
The last 10 are:
[999809 999853 999863 999883 999907 999917 999931 999961 999979 999983]
[999853 999863 999883 999907 999917 999931 999961 999979 999983 1000003]
</pre>
</pre>