Proper divisors: Difference between revisions

no edit summary
(→‎{{header|Prolog}}: Added Prolog solution)
No edit summary
Line 1,029:
1441440 -> 287
0.530 seconds elapsed</pre>
 
=={{header|PowerShell}}==
<lang PowerShell>
function eratosthenes ($n) {
if($n -gt 1){
$prime = @(1..($n+1) | foreach{$true})
$prime[1] = $false
$m = [Math]::Floor([Math]::Sqrt($n))
function multiple($i) {
for($j = $i*$i; $j -le $n; $j += $i) {
$prime[$j] = $false
}
}
multiple 2
for($i = 3; $i -le $m; $i += 2) {
if($prime[$i]) {multiple $i}
}
1..$n | where{$prime[$_]}
} else {
Write-Error "$n is not greater than 1"
}
}
function proper-divisor ($n) {
$array = eratosthenes ($n-1)
$divisor = @(1)
$m = $n
foreach($p in $array) {
$div = $p
while(($m%$p -eq 0) -and ($div -lt $n)) {
$divisor += @($div)
$m /= $p
$div *= $p
}
}
$divisor
}
"$(proper-divisor 100)"
"$(proper-divisor 2048)"
</lang>
<b>Output:</b>
<pre>
1 2 4 5 25
1 2 4 8 16 32 64 128 256 512 1024
</pre
 
=={{header|Prolog}}==
678

edits