Proper divisors: Difference between revisions
Content added Content deleted
No edit summary |
No edit summary |
||
Line 288: | Line 288: | ||
</pre> |
</pre> |
||
=={{header|Algol-M}}== |
|||
Algol-M's maximum allowed integer value of 16,383 prevented searching up to 20,000 for the number with the most divisors, so the code here searches only up to 10,000. |
|||
<lang algol> |
|||
BEGIN |
|||
% COMPUTE P MOD Q % |
|||
INTEGER FUNCTION MOD (P, Q); |
|||
INTEGER P, Q; |
|||
BEGIN |
|||
MOD := P - Q * (P / Q); |
|||
END; |
|||
% COUNT, AND OPTIONALLY DISPLAY, PROPER DIVISORS OF N % |
|||
INTEGER FUNCTION DIVISORS(N, DISPLAY); |
|||
INTEGER N, DISPLAY; |
|||
BEGIN |
|||
INTEGER I, LIMIT, COUNT, START, DELTA; |
|||
IF MOD(N, 2) = 0 THEN |
|||
BEGIN |
|||
START := 2; |
|||
DELTA := 1; |
|||
END |
|||
ELSE % ONLY NEED TO CHECK ODD DIVISORS % |
|||
BEGIN |
|||
START := 3; |
|||
DELTA := 2; |
|||
END; |
|||
% 1 IS ALWAYS A DIVISOR % |
|||
COUNT := 1; |
|||
% ANY NON-ZERO VALUE FOR DISPLAY IS TRUE % |
|||
IF DISPLAY <> 0 THEN WRITEON(1); |
|||
% CHECK REMAINING POTENTIAL DIVISORS % |
|||
I := START; |
|||
LIMIT := N / START; |
|||
WHILE I <= LIMIT DO |
|||
BEGIN |
|||
IF MOD(N, I) = 0 THEN |
|||
BEGIN |
|||
IF DISPLAY <> 0 THEN WRITEON(I); |
|||
COUNT := COUNT + 1; |
|||
END; |
|||
I := I + DELTA; |
|||
IF COUNT = 1 THEN LIMIT := N / I; |
|||
END; |
|||
DIVISORS := COUNT; |
|||
END; |
|||
COMMENT MAIN PROGRAM BEGINS HERE; |
|||
INTEGER I, NDIV, TRUE, FALSE, HIGHDIV, HIGHNUM; |
|||
TRUE := -1; |
|||
FALSE := 0; |
|||
WRITE("PROPER DIVISORS OF FIRST TEN NUMBERS:"); |
|||
FOR I := 1 STEP 1 UNTIL 10 DO |
|||
BEGIN |
|||
WRITE(I, " : "); |
|||
NDIV := DIVISORS(I, TRUE); |
|||
END; |
|||
WRITE("SEARCHING FOR NUMBER WITH MOST DIVISORS ..."); |
|||
HIGHDIV := 1; |
|||
HIGHNUM := 1; |
|||
FOR I := 1 STEP 1 UNTIL 10000 DO |
|||
BEGIN |
|||
NDIV := DIVISORS(I, FALSE); |
|||
IF NDIV > HIGHDIV THEN |
|||
BEGIN |
|||
HIGHDIV := NDIV; |
|||
HIGHNUM := I; |
|||
END; |
|||
END; |
|||
WRITE("THE NUMBER IS:", HIGHNUM); |
|||
WRITE("IT HAS", HIGHDIV, " DIVISORS"); |
|||
END |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
PROPER DIVISORS OF FIRST TEN NUMBERS: |
|||
1 : 1 |
|||
2 : 1 |
|||
3 : 1 |
|||
4 : 1 2 |
|||
5 : 1 |
|||
6 : 1 2 3 |
|||
7 : 1 |
|||
8 : 1 2 4 |
|||
9 : 1 3 |
|||
10 : 1 2 5 |
|||
SEARCHING FOR NUMBER WITH MOST DIVISORS: |
|||
THE NUMBER IS: 7560 |
|||
IT HAS 63 DIVISORS |
|||
</pre> |
|||