Arithmetic numbers: Difference between revisions
Content added Content deleted
SqrtNegInf (talk | contribs) (Added Perl) |
No edit summary |
||
Line 29: | Line 29: | ||
<br><br> |
<br><br> |
||
=={{header|Ada}}== |
|||
<lang Ada>with Ada.Text_IO; use Ada.Text_IO; |
|||
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; |
|||
procedure Main is |
|||
procedure divisor_count_and_sum |
|||
(n : Positive; divisor_count : out Natural; divisor_sum : out Natural) |
|||
is |
|||
I : Positive := 1; |
|||
J : Natural; |
|||
begin |
|||
divisor_count := 0; |
|||
divisor_sum := 0; |
|||
loop |
|||
J := n / I; |
|||
exit when J < I; |
|||
if I * J = n then |
|||
divisor_sum := divisor_sum + I; |
|||
divisor_count := divisor_count + 1; |
|||
if I /= J then |
|||
divisor_sum := divisor_sum + J; |
|||
divisor_count := divisor_count + 1; |
|||
end if; |
|||
end if; |
|||
I := I + 1; |
|||
end loop; |
|||
end divisor_count_and_sum; |
|||
arithmetic_count : Natural := 0; |
|||
composite_count : Natural := 0; |
|||
div_count : Natural; |
|||
div_sum : Natural; |
|||
mean : Natural; |
|||
n : Positive := 1; |
|||
begin |
|||
while arithmetic_count <= 1_000_000 loop |
|||
divisor_count_and_sum (n, div_count, div_sum); |
|||
mean := div_sum / div_count; |
|||
if mean * div_count = div_sum then |
|||
arithmetic_count := arithmetic_count + 1; |
|||
if div_count > 2 then |
|||
composite_count := composite_count + 1; |
|||
end if; |
|||
if arithmetic_count <= 100 then |
|||
Put (Item => n, Width => 4); |
|||
if arithmetic_count mod 10 = 0 then |
|||
New_Line; |
|||
end if; |
|||
end if; |
|||
if arithmetic_count = 1_000 or else arithmetic_count = 10_000 |
|||
or else arithmetic_count = 100_000 |
|||
or else arithmetic_count = 1_000_000 |
|||
then |
|||
New_Line; |
|||
Put (Item => arithmetic_count, Width => 1); |
|||
Put_Line ("th arithmetic number is" & n'Image); |
|||
Put_Line |
|||
("Number of composite arithmetic numbers <=" & n'Image & ":" & |
|||
composite_count'Image); |
|||
end if; |
|||
end if; |
|||
n := n + 1; |
|||
end loop; |
|||
end Main;</lang> |
|||
{{out}} |
|||
<pre> |
|||
1 3 5 6 7 11 13 14 15 17 |
|||
19 20 21 22 23 27 29 30 31 33 |
|||
35 37 38 39 41 42 43 44 45 46 |
|||
47 49 51 53 54 55 56 57 59 60 |
|||
61 62 65 66 67 68 69 70 71 73 |
|||
77 78 79 83 85 86 87 89 91 92 |
|||
93 94 95 96 97 99 101 102 103 105 |
|||
107 109 110 111 113 114 115 116 118 119 |
|||
123 125 126 127 129 131 132 133 134 135 |
|||
137 138 139 140 141 142 143 145 147 149 |
|||
1000th arithmetic number is 1361 |
|||
Number of composite arithmetic numbers <= 1361: 782 |
|||
10000th arithmetic number is 12953 |
|||
Number of composite arithmetic numbers <= 12953: 8458 |
|||
100000th arithmetic number is 125587 |
|||
Number of composite arithmetic numbers <= 125587: 88219 |
|||
1000000th arithmetic number is 1228663 |
|||
Number of composite arithmetic numbers <= 1228663: 905043 |
|||
</pre> |
|||
=={{header|ALGOL 68}}== |
=={{header|ALGOL 68}}== |