Sum of divisors: Difference between revisions
Content added Content deleted
MaiconSoft (talk | contribs) (Added Delphi example) |
|||
Line 469: | Line 469: | ||
121 126 84 224 108 132 120 180 90 234 |
121 126 84 224 108 132 120 180 90 234 |
||
112 168 128 144 120 252 98 171 156 217</pre> |
112 168 128 144 120 252 98 171 156 217</pre> |
||
=={{header|D}}== |
|||
{{trans|C}} |
|||
<lang d>import std.stdio; |
|||
// See https://en.wikipedia.org/wiki/Divisor_function |
|||
uint divisor_sum(uint n) { |
|||
uint total = 1, power = 2; |
|||
// Deal with powers of 2 first |
|||
for (; (n & 1) == 0; power <<= 1, n >>= 1) { |
|||
total += power; |
|||
} |
|||
// Odd prime factors up to the square root |
|||
for (uint p = 3; p * p <= n; p += 2) { |
|||
uint sum = 1; |
|||
for (power = p; n % p == 0; power *= p, n /= p) { |
|||
sum += power; |
|||
} |
|||
total *= sum; |
|||
} |
|||
// If n > 1 then it's prime |
|||
if (n > 1) { |
|||
total *= n + 1; |
|||
} |
|||
return total; |
|||
} |
|||
void main() { |
|||
immutable limit = 100; |
|||
writeln("Sum of divisors for the first ", limit," positive integers:"); |
|||
for (uint n = 1; n <= limit; ++n) { |
|||
writef("%4d", divisor_sum(n)); |
|||
if (n % 10 == 0) { |
|||
writeln; |
|||
} |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre>Sum of divisors for the first 100 positive integers: |
|||
1 3 4 7 6 12 8 15 13 18 |
|||
12 28 14 24 24 31 18 39 20 42 |
|||
32 36 24 60 31 42 40 56 30 72 |
|||
32 63 48 54 48 91 38 60 56 90 |
|||
42 96 44 84 78 72 48 124 57 93 |
|||
72 98 54 120 72 120 80 90 60 168 |
|||
62 96 104 127 84 144 68 126 96 144 |
|||
72 195 74 114 124 140 96 168 80 186 |
|||
121 126 84 224 108 132 120 180 90 234 |
|||
112 168 128 144 120 252 98 171 156 217 </pre> |
|||
=={{header|Delphi}}== |
=={{header|Delphi}}== |