Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
41
Task/Hamming-numbers/ALGOL-W/hamming-numbers.alg
Normal file
41
Task/Hamming-numbers/ALGOL-W/hamming-numbers.alg
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
begin
|
||||
% returns the minimum of a and b %
|
||||
integer procedure min ( integer value a, b ) ; if a < b then a else b;
|
||||
% find and print Hamming Numbers %
|
||||
% Algol W only supports 32-bit integers so we just find %
|
||||
% the 1691 32-bit Hamming Numbers %
|
||||
integer MAX_HAMMING;
|
||||
MAX_HAMMING := 1691;
|
||||
begin
|
||||
integer array H( 1 :: MAX_HAMMING );
|
||||
integer p2, p3, p5, last2, last3, last5;
|
||||
H( 1 ) := 1;
|
||||
last2 := last3 := last5 := 1;
|
||||
p2 := 2;
|
||||
p3 := 3;
|
||||
p5 := 5;
|
||||
for hPos := 2 until MAX_HAMMING do begin
|
||||
integer m;
|
||||
% the next Hamming number is the lowest of the next multiple of 2, 3, and 5 %
|
||||
m := min( min( p2, p3 ), p5 );
|
||||
H( hPos ) := m;
|
||||
if m = p2 then begin
|
||||
last2 := last2 + 1;
|
||||
p2 := 2 * H( last2 )
|
||||
end if_used_power_of_2 ;
|
||||
if m = p3 then begin
|
||||
last3 := last3 + 1;
|
||||
p3 := 3 * H( last3 )
|
||||
end if_used_power_of_3 ;
|
||||
if m = p5 then begin
|
||||
last5 := last5 + 1;
|
||||
p5 := 5 * H( last5 )
|
||||
end if_used_power_of_5 ;
|
||||
end for_hPos ;
|
||||
i_w := 1;
|
||||
s_w := 1;
|
||||
write( H( 1 ) );
|
||||
for i := 2 until 20 do writeon( H( i ) );
|
||||
write( H( MAX_HAMMING ) )
|
||||
end
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue