76 lines
1.7 KiB
Text
76 lines
1.7 KiB
Text
$ENTRY Go {
|
|
= <Prout 'First 50 Duffinian numbers:'>
|
|
<Each Prout <Group 10 <Gen 50 Duffinian>>>
|
|
<Prout>
|
|
<Prout 'First 15 Duffinian triples:'>
|
|
<Each ShowTriple <Gen 15 DuffinianTriple>>;
|
|
};
|
|
|
|
ShowTriple {
|
|
s.N = <Prout s.N <Add 1 s.N> <Add 2 s.N>>;
|
|
};
|
|
|
|
Each {
|
|
s.F = ;
|
|
s.F t.I e.X = <Mu s.F t.I> <Each s.F e.X>;
|
|
};
|
|
|
|
Group {
|
|
s.N = ;
|
|
s.N e.X, <First s.N e.X>: (e.1) e.2 = (e.1) <Group s.N e.2>;
|
|
};
|
|
|
|
Gen {
|
|
s.N s.F = <Gen s.N s.F 0>;
|
|
0 s.F s.I = ;
|
|
s.N s.F s.I, <Mu s.F s.I>: {
|
|
True = s.I <Gen <Sub s.N 1> s.F <Add s.I 1>>;
|
|
False = <Gen s.N s.F <Add s.I 1>>;
|
|
};
|
|
};
|
|
|
|
DuffinianTriple {
|
|
s.N, <Duffinian s.N>
|
|
<Duffinian <Add 1 s.N>>
|
|
<Duffinian <Add 2 s.N>>: True True True = True;
|
|
s.N = False;
|
|
};
|
|
|
|
Duffinian {
|
|
s.N, <SigmaSum s.N>: s.S,
|
|
<Add s.N 1>: s.P,
|
|
s.S <Gcd s.N s.S>: {
|
|
s.P s.1 = False;
|
|
s.Q 1 = True;
|
|
s.1 s.2 = False;
|
|
};
|
|
};
|
|
|
|
Gcd {
|
|
s.A 0 = s.A;
|
|
s.A s.B = <Gcd s.B <Mod s.A s.B>>;
|
|
};
|
|
|
|
SigmaSum {
|
|
s.N = <SigmaSum s.N <Add 1 s.N> 2 <Sqrt s.N>>;
|
|
s.N s.Sum s.D s.Max, <Compare s.D s.Max>: '+' = s.Sum;
|
|
s.N s.Sum s.D s.Max, <Mul s.D s.D>: s.N = <Add s.Sum s.Max>;
|
|
s.N s.Sum s.D s.Max, <Mod s.N s.D>: 0 =
|
|
<SigmaSum s.N
|
|
<Add s.Sum
|
|
<Add s.D <Div s.N s.D>>>
|
|
<Add 1 s.D> s.Max>;
|
|
s.N s.Sum s.D s.Max = <SigmaSum s.N s.Sum <Add 1 s.D> s.Max>;
|
|
};
|
|
|
|
Sqrt {
|
|
0 = 1;
|
|
1 = 1;
|
|
s.N = <Sqrt s.N <Div s.N 2>>;
|
|
s.N s.X0,
|
|
<Div <Add s.X0 <Div s.N s.X0>> 2>: s.X1,
|
|
<Compare s.X0 s.X1>: {
|
|
'+' = <Sqrt s.N s.X1>;
|
|
s.C = s.X0;
|
|
};
|
|
};
|