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 |
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 |
# 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 |
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 |
is giuga := ( ( n OVER 2 ) - 1 ) MOD 2 = 0; |
||
IF is |
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 |
IF is giuga THEN |
||
FOR f FROM 3 BY 2 WHILE f <= v AND is |
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 |
is giuga := ( ( n OVER f ) - 1 ) MOD f = 0; |
||
IF is |
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 |
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 |
is giuga := f count > 1 |
||
FI |
FI |
||
FI; |
FI; |
||
IF is |
IF is giuga THEN |
||
g count +:= 1; |
g count +:= 1; |
||
print( ( " ", whole( n, 0 ) ) ) |
print( ( " ", whole( n, 0 ) ) ) |