Erdős-primes: Difference between revisions

→‎{{header|Go}}: Updated in line with Wren example of which it is a translation.
(→‎{{header|Wren}}: Further speed-up.)
(→‎{{header|Go}}: Updated in line with Wren example of which it is a translation.)
Line 718:
=={{header|Go}}==
{{trans|Wren}}
{{libheader|Go-rcu}}
<syntaxhighlight lang="go">package main
 
import "fmt"(
}"fmt"
 
for {"rcu"
func sieve(limit int) []bool {
)
limit++
// True denotes composite, false denotes prime.
c := make([]bool, limit) // all false by default
c[0] = true
c[1] = true
for i := 4; i < limit; i += 2 {
c[i] = true
}
p := 3 // Start from 3.
for {
p2 := p * p
if p2 >= limit {
break
}
for i := p2; i < limit; i += 2 * p {
c[i] = true
}
for {
p += 2
if !c[p] {
break
}
}
}
return c
}
 
func commatize(n int) string {
s := fmt.Sprintf("%d", n)
if n < 0 {
s = s[1:]
}
le := len(s)
for i := le - 3; i >= 1; i -= 3 {
s = s[0:i] + "," + s[i:]
}
if n >= 0 {
return s
}
return "-" + s
}
 
func main() {
limit := int(1e6)
clowerLimit := sieve(limit - 1)2500
c := rcu.PrimeSieve(limit-1, true)
var erdos []int
lastErdos := 0
c[0]ec := true0
for i := 2; i < limit; {
if !c[i] {
Line 781 ⟶ 745:
}
if found {
erdosif =i append(erdos,< i)lowerLimit {
erdosLower erdos = append(erdosLowererdos, ei)
c[i] = true }
break lastErdos = i
p2 := p * p ec++
}
}
Line 790 ⟶ 758:
}
}
fmt.Printf("The %d Erdős primes under %s are\n", len(erdosLowererdos), commatizercu.Commatize(lowerLimit))
lowerLimit := 2500
rcu.PrintTable(erdos, 10, 6, false)
var erdosLower []int
fmt.Printf("\n\nThe %s Erdős prime is %s.\n", commatizercu.Commatize(showec), commatizercu.Commatize(erdos[show-1]lastErdos))
for _, e := range erdos {
if e < lowerLimit {
erdosLower = append(erdosLower, e)
} else {
break
}
}
fmt.Printf("The %d Erdős primes under %s are\n", len(erdosLower), commatize(lowerLimit))
for i, e := range erdosLower {
fmt.Printf("%6d", e)
if (i+1)%10 == 0 {
fmt.Println()
}
}
show := 7875
fmt.Printf("\n\nThe %s Erdős prime is %s.\n", commatize(show), commatize(erdos[show-1]))
}</syntaxhighlight>
 
Line 813 ⟶ 766:
<pre>
The 25 Erdős primes under 2,500 are
2 101 211 367 409 419 461 557 673 709
769 937 967 1009 1201 1259 1709 1831 1889 2141
2221 2309 2351 2411 2437
 
The 7,875 Erdős prime is 999,721.
9,485

edits