60 lines
2.3 KiB
Text
60 lines
2.3 KiB
Text
BEGIN # find some self numbers numbers n such that there is no g such that g + sum of g's digits = n #
|
|
INT max number = 1 999 999 999 + 82; # maximum n plus g we will condifer #
|
|
# sieve the self numbers up to 1 999 999 999 #
|
|
[ 0 : max number ]BOOL self; FOR i TO UPB self DO self[ i ] := TRUE OD;
|
|
INT n := 0;
|
|
FOR s0 FROM 0 TO 1 DO
|
|
FOR d1 FROM 0 TO 9 DO
|
|
INT s1 = s0 + d1;
|
|
FOR d2 FROM 0 TO 9 DO
|
|
INT s2 = s1 + d2;
|
|
FOR d3 FROM 0 TO 9 DO
|
|
INT s3 = s2 + d3;
|
|
FOR d4 FROM 0 TO 9 DO
|
|
INT s4 = s3 + d4;
|
|
FOR d5 FROM 0 TO 9 DO
|
|
INT s5 = s4 + d5;
|
|
FOR d6 FROM 0 TO 9 DO
|
|
INT s6 = s5 + d6;
|
|
FOR d7 FROM 0 TO 9 DO
|
|
INT s7 = s6 + d7;
|
|
FOR d8 FROM 0 TO 9 DO
|
|
INT s8 = s7 + d8;
|
|
FOR d9 FROM 0 TO 9 DO
|
|
INT s9 = s8 + d9;
|
|
self[ s9 + n ] := FALSE;
|
|
n +:= 1
|
|
OD
|
|
OD
|
|
OD
|
|
OD
|
|
OD
|
|
OD
|
|
OD
|
|
OD
|
|
OD
|
|
OD;
|
|
# show the first 50 self numbers #
|
|
INT s count := 0;
|
|
FOR i TO UPB self WHILE s count < 50 DO
|
|
IF self[ i ] THEN
|
|
print( ( " ", whole( i, -3 ) ) );
|
|
IF ( s count +:= 1 ) MOD 18 = 0 THEN print( ( newline ) ) FI
|
|
FI
|
|
OD;
|
|
print( ( newline ) );
|
|
# show the self numbers with power-of-10 indxes #
|
|
INT s show := 1;
|
|
s count := 0;
|
|
print( ( " nth self", newline ) );
|
|
print( ( " n number", newline ) );
|
|
FOR i TO UPB self DO
|
|
IF self[ i ] THEN
|
|
s count +:= 1;
|
|
IF s count = s show THEN
|
|
print( ( whole( s show, -9 ), " ", whole( i, -11 ), newline ) );
|
|
s show *:= 10
|
|
FI
|
|
FI
|
|
OD
|
|
END
|