Perfect totient numbers: Difference between revisions
Content added Content deleted
(Added Wren) |
|||
Line 1,376: | Line 1,376: | ||
<pre>The first 20 perfect totient numbers are: |
<pre>The first 20 perfect totient numbers are: |
||
[3, 9, 15, 27, 39, 81, 111, 183, 243, 255, 327, 363, 471, 729, 2187, 2199, 3063, 4359, 4375, 5571]</pre> |
[3, 9, 15, 27, 39, 81, 111, 183, 243, 255, 327, 363, 471, 729, 2187, 2199, 3063, 4359, 4375, 5571]</pre> |
||
=={{header|Wren}}== |
|||
{{trans|Go}} |
|||
The version using Euler's product formula. |
|||
<lang ecmascript>var totient = Fn.new { |n| |
|||
var tot = n |
|||
var i = 2 |
|||
while (i*i <= n) { |
|||
if (n%i == 0) { |
|||
while(n%i == 0) n = (n/i).floor |
|||
tot = tot - (tot/i).floor |
|||
} |
|||
if (i == 2) i = 1 |
|||
i = i + 2 |
|||
} |
|||
if (n > 1) tot = tot - (tot/n).floor |
|||
return tot |
|||
} |
|||
var perfect = [] |
|||
var n = 1 |
|||
while (perfect.count < 20) { |
|||
var tot = n |
|||
var sum = 0 |
|||
while (tot != 1) { |
|||
tot = totient.call(tot) |
|||
sum = sum + tot |
|||
} |
|||
if (sum == n) perfect.add(n) |
|||
n = n + 2 |
|||
} |
|||
System.print("The first 20 perfect totient numbers are:") |
|||
System.print(perfect)</lang> |
|||
{{out}} |
|||
<pre> |
|||
The first 20 perfect totient numbers are: |
|||
[3, 9, 15, 27, 39, 81, 111, 183, 243, 255, 327, 363, 471, 729, 2187, 2199, 3063, 4359, 4375, 5571] |
|||
</pre> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |