55 lines
1.3 KiB
Text
55 lines
1.3 KiB
Text
$ENTRY Go {
|
|
, <Stern 1300>: e.Seq
|
|
= <Prout 'First 15: ' <Take 15 e.Seq>>
|
|
<ForEach (<Iota 1 10>) ShowFirst e.Seq>
|
|
<ShowFirst 100 e.Seq>
|
|
<Prout <GcdPairCheck <Take 1000 e.Seq>>>;
|
|
};
|
|
|
|
Stern {
|
|
s.N = <Stern <- s.N 2> (1) 1>;
|
|
0 (e.X) e.Y = e.X e.Y;
|
|
s.N (e.X s.P) s.C e.Y,
|
|
<- s.N 1>: s.Rem,
|
|
<+ s.P s.C>: s.CSum
|
|
= <Stern s.Rem (e.X s.P s.C) e.Y s.CSum s.C>;
|
|
};
|
|
|
|
Take {
|
|
0 e.X = ;
|
|
s.N s.I e.X = s.I <Take <- s.N 1> e.X>;
|
|
};
|
|
|
|
FindFirst {
|
|
s.I e.X = <FindFirst (1) s.I e.X>;
|
|
(s.L) s.I s.I e.X = s.L;
|
|
(s.L) s.I s.J e.X = <FindFirst (<+ s.L 1>) s.I e.X>;
|
|
};
|
|
|
|
ShowFirst {
|
|
s.I e.X, <FindFirst s.I e.X>: s.N = <Prout 'First ' s.I 'at ' s.N>;
|
|
};
|
|
|
|
ForEach {
|
|
() s.F e.Arg = ;
|
|
(s.I e.X) s.F e.Arg = <Mu s.F s.I e.Arg> <ForEach (e.X) s.F e.Arg>;
|
|
};
|
|
|
|
Iota {
|
|
s.From s.To = <Iota s.From s.To s.From>;
|
|
s.From s.To s.To = s.To;
|
|
s.From s.To s.Cur = s.Cur <Iota s.From s.To <+ s.Cur 1>>;
|
|
};
|
|
|
|
Gcd {
|
|
s.N 0 = s.N;
|
|
s.N s.M = <Gcd s.M <Mod s.N s.M>>;
|
|
};
|
|
|
|
GcdPairCheck {
|
|
s.A s.B e.X, <Gcd s.A s.B>: 1
|
|
= <GcdPairCheck s.B e.X>;
|
|
s.A s.B e.X, <Gcd s.A s.B>: s.N
|
|
= 'The GCD of ' <Symb s.A> ' and ' <Symb s.B> ' is ' <Symb s.N>;
|
|
e.X = 'The GCDs of all adjacent pairs are 1.';
|
|
};
|