47 lines
855 B
Text
47 lines
855 B
Text
class Seq(terms, callback) {
|
|
method next {
|
|
terms += callback(terms)
|
|
}
|
|
|
|
method nth(n) {
|
|
while (terms.len < n) {
|
|
self.next
|
|
}
|
|
terms[n-1]
|
|
}
|
|
|
|
method first(n) {
|
|
while (terms.len < n) {
|
|
self.next
|
|
}
|
|
terms.first(n)
|
|
}
|
|
}
|
|
|
|
func next_EKG (s) {
|
|
2..Inf -> first {|k|
|
|
!(s.contains(k) || s[-1].is_coprime(k))
|
|
}
|
|
}
|
|
|
|
func EKG (start) {
|
|
Seq([1, start], next_EKG)
|
|
}
|
|
|
|
func converge_at(ints) {
|
|
var ekgs = ints.map(EKG)
|
|
|
|
2..Inf -> first {|k|
|
|
(ekgs.map { .nth(k) }.uniq.len == 1) &&
|
|
(ekgs.map { .first(k).sort }.uniq.len == 1)
|
|
}
|
|
}
|
|
|
|
for k in [2, 5, 7, 9, 10] {
|
|
say "EKG(#{k}) = #{EKG(k).first(10)}"
|
|
}
|
|
|
|
for arr in [[5,7], [2, 5, 7, 9, 10]] {
|
|
var c = converge_at(arr)
|
|
say "EKGs of #{arr} converge at term #{c}"
|
|
}
|