RosettaCodeData/Task/Yellowstone-sequence/D/yellowstone-sequence.d

50 lines
927 B
D

import std.numeric;
import std.range;
import std.stdio;
class Yellowstone {
private bool[int] sequence_;
private int min_ = 1;
private int n_ = 0;
private int n1_ = 0;
private int n2_ = 0;
public this() {
popFront();
}
public bool empty() {
return false;
}
public int front() {
return n_;
}
public void popFront() {
n2_ = n1_;
n1_ = n_;
if (n_ < 3) {
++n_;
} else {
for (n_ = min_;
!(n_ !in sequence_ && gcd(n1_, n_) == 1 && gcd(n2_, n_) > 1);
++n_) {
// empty
}
}
sequence_[n_] = true;
while (true) {
if (min_ !in sequence_) {
break;
}
sequence_.remove(min_);
++min_;
}
}
}
void main() {
new Yellowstone().take(30).writeln();
}