Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
70
Task/Long-primes/Go/long-primes.go
Normal file
70
Task/Long-primes/Go/long-primes.go
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func sieve(limit int) []int {
|
||||
var primes []int
|
||||
c := make([]bool, limit + 1) // composite = true
|
||||
// no need to process even numbers
|
||||
p := 3
|
||||
p2 := p * p
|
||||
for p2 <= limit {
|
||||
for i := p2; i <= limit; i += 2 * p {
|
||||
c[i] = true
|
||||
}
|
||||
for ok := true; ok; ok = c[p] {
|
||||
p += 2
|
||||
}
|
||||
p2 = p * p
|
||||
}
|
||||
for i := 3; i <= limit; i += 2 {
|
||||
if !c[i] {
|
||||
primes = append(primes, i)
|
||||
}
|
||||
}
|
||||
return primes
|
||||
}
|
||||
|
||||
// finds the period of the reciprocal of n
|
||||
func findPeriod(n int) int {
|
||||
r := 1
|
||||
for i := 1; i <= n + 1; i++ {
|
||||
r = (10 * r) % n
|
||||
}
|
||||
rr := r
|
||||
period := 0
|
||||
for ok := true; ok; ok = r != rr {
|
||||
r = (10 * r) % n
|
||||
period++
|
||||
}
|
||||
return period
|
||||
}
|
||||
|
||||
func main() {
|
||||
primes := sieve(64000)
|
||||
var longPrimes []int
|
||||
for _, prime := range primes {
|
||||
if findPeriod(prime) == prime - 1 {
|
||||
longPrimes = append(longPrimes, prime)
|
||||
}
|
||||
}
|
||||
numbers := []int{500, 1000, 2000, 4000, 8000, 16000, 32000, 64000}
|
||||
index := 0
|
||||
count := 0
|
||||
totals := make([]int, len(numbers))
|
||||
for _, longPrime := range longPrimes {
|
||||
if longPrime > numbers[index] {
|
||||
totals[index] = count
|
||||
index++
|
||||
}
|
||||
count++
|
||||
}
|
||||
totals[len(numbers)-1] = count
|
||||
fmt.Println("The long primes up to", numbers[0], "are: ")
|
||||
fmt.Println(longPrimes[:totals[0]])
|
||||
|
||||
fmt.Println("\nThe number of long primes up to: ")
|
||||
for i, total := range totals {
|
||||
fmt.Printf(" %5d is %d\n", numbers[i], total)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue