Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
72
Task/EKG-sequence-convergence/Go/ekg-sequence-convergence.go
Normal file
72
Task/EKG-sequence-convergence/Go/ekg-sequence-convergence.go
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
)
|
||||
|
||||
func contains(a []int, b int) bool {
|
||||
for _, j := range a {
|
||||
if j == b {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func gcd(a, b int) int {
|
||||
for a != b {
|
||||
if a > b {
|
||||
a -= b
|
||||
} else {
|
||||
b -= a
|
||||
}
|
||||
}
|
||||
return a
|
||||
}
|
||||
|
||||
func areSame(s, t []int) bool {
|
||||
le := len(s)
|
||||
if le != len(t) {
|
||||
return false
|
||||
}
|
||||
sort.Ints(s)
|
||||
sort.Ints(t)
|
||||
for i := 0; i < le; i++ {
|
||||
if s[i] != t[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func main() {
|
||||
const limit = 100
|
||||
starts := [5]int{2, 5, 7, 9, 10}
|
||||
var ekg [5][limit]int
|
||||
|
||||
for s, start := range starts {
|
||||
ekg[s][0] = 1
|
||||
ekg[s][1] = start
|
||||
for n := 2; n < limit; n++ {
|
||||
for i := 2; ; i++ {
|
||||
// a potential sequence member cannot already have been used
|
||||
// and must have a factor in common with previous member
|
||||
if !contains(ekg[s][:n], i) && gcd(ekg[s][n-1], i) > 1 {
|
||||
ekg[s][n] = i
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Printf("EKG(%2d): %v\n", start, ekg[s][:30])
|
||||
}
|
||||
|
||||
// now compare EKG5 and EKG7 for convergence
|
||||
for i := 2; i < limit; i++ {
|
||||
if ekg[1][i] == ekg[2][i] && areSame(ekg[1][:i], ekg[2][:i]) {
|
||||
fmt.Println("\nEKG(5) and EKG(7) converge at term", i+1)
|
||||
return
|
||||
}
|
||||
}
|
||||
fmt.Println("\nEKG5(5) and EKG(7) do not converge within", limit, "terms")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue