Giuga numbers: Difference between revisions

Content added Content deleted
(Added Algol 68)
(→‎{{header|ALGOL 68}}: Must spell Giuga correctly)
Line 67: Line 67:
=={{header|ALGOL 68}}==
=={{header|ALGOL 68}}==
<syntaxhighlight lang="algol68">
<syntaxhighlight lang="algol68">
BEGIN # find some Guiga numbers, composites n such that all their distinct #
BEGIN # find some Giuga numbers, composites n such that all their distinct #
# prime factors f exactly divide ( n / f ) - 1 #
# prime factors f exactly divide ( n / f ) - 1 #


# find the first four Guiga numbers #
# find the first four Giuga numbers #
INT g count := 0;
INT g count := 0;
FOR n FROM 2 WHILE g count < 4 DO
FOR n FROM 2 WHILE g count < 4 DO
INT v := n;
INT v := n;
BOOL is guiga := TRUE;
BOOL is giuga := TRUE;
INT f count := 0;
INT f count := 0;
IF NOT ODD v THEN
IF NOT ODD v THEN
# 2 is a prime factor of n #
# 2 is a prime factor of n #
is guiga := ( ( n OVER 2 ) - 1 ) MOD 2 = 0;
is giuga := ( ( n OVER 2 ) - 1 ) MOD 2 = 0;
IF is guiga THEN
IF is giuga THEN
f count +:= 1;
f count +:= 1;
WHILE v MOD 2 = 0 DO v OVERAB 2 OD
WHILE v MOD 2 = 0 DO v OVERAB 2 OD
FI
FI
FI;
FI;
IF is guiga THEN
IF is giuga THEN
FOR f FROM 3 BY 2 WHILE f <= v AND is guiga DO
FOR f FROM 3 BY 2 WHILE f <= v AND is giuga DO
IF v MOD f = 0 THEN
IF v MOD f = 0 THEN
# have a prime factor #
# have a prime factor #
f count +:= 1;
f count +:= 1;
is guiga := ( ( n OVER f ) - 1 ) MOD f = 0;
is giuga := ( ( n OVER f ) - 1 ) MOD f = 0;
IF is guiga THEN
IF is giuga THEN
# n is still a candidate #
# n is still a candidate #
v OVERAB f;
v OVERAB f;
Line 97: Line 97:
FI
FI
OD;
OD;
IF is guiga THEN
IF is giuga THEN
# n is still a candidate, check it is not prime #
# n is still a candidate, check it is not prime #
is guiga := f count > 1
is giuga := f count > 1
FI
FI
FI;
FI;
IF is guiga THEN
IF is giuga THEN
g count +:= 1;
g count +:= 1;
print( ( " ", whole( n, 0 ) ) )
print( ( " ", whole( n, 0 ) ) )