Proper divisors: Difference between revisions

(Added Easylang)
(5 intermediate revisions by 3 users not shown)
Line 2,245:
=={{header|EasyLang}}==
<syntaxhighlight>
procfunc[] propdivs n . divs[] .
divs[] = [ ]
if n < 2
return [ ]
.
divs[] &= 1
Line 2,260 ⟶ 2,259:
.
.
return divs[] = [ ]
.
for i to 10
print i & ":" & propdivs i
propdivs i d[]
write i & ":"
print d[]
.
for i to 20000
d[] = propdivs i
propdivs i d[]
if len d[] > max
max = len d[]
Line 2,275 ⟶ 2,273:
print maxi & " has " & max & " proper divisors."
</syntaxhighlight>
{{out}}
<pre>
1:[ ]
2:[ 1 ]
3:[ 1 ]
4:[ 1 2 ]
5:[ 1 ]
6:[ 1 2 3 ]
7:[ 1 ]
8:[ 1 2 4 ]
9:[ 1 3 ]
10:[ 1 2 5 ]
15120 has 79 proper divisors.
</pre>
 
=={{header|EchoLisp}}==
Line 2,795 ⟶ 2,807:
</pre>
 
=={{header|Free Pascal}}==
<syntaxhighlight lang="pascal">
Program ProperDivisors;
 
Uses fgl;
 
Type
TIntegerList = Specialize TfpgList<longint>;
 
Var list : TintegerList;
 
Function GetProperDivisors(x : longint): longint;
{this function will return the number of proper divisors
and put them in the list}
 
Var i : longint;
Begin
list.clear;
If x = 1 Then {by default 1 has no proper divisors}
GetProperDivisors := 0
Else
Begin
list.add(1); //add 1 as a proper divisor;
i := 2;
While i * i < x Do
Begin
If (x Mod i) = 0 Then //found a proper divisor
Begin
list.add(i); // add divisor
list.add(x Div i); // add result
End;
inc(i);
End;
If i*i=x Then list.add(i); //make sure to capture the sqrt only once
GetProperDivisors := list.count;
End;
End;
 
Var i,j,count,most : longint;
Begin
 
list := TIntegerList.Create;
For i := 1 To 10 Do
Begin
write(i:4,' has ', GetProperDivisors(i),' proper divisors:');
For j := 0 To pred(list.count) Do
write(list[j]:3);
writeln();
End;
count := 0; //store highest number of proper divisors
most := 0; //store number with highest number of proper divisors
For i := 1 To 20000 Do
If GetProperDivisors(i) > count Then
Begin
count := list.count;
most := i;
End;
writeln(most,' has ',count,' proper divisors');
list.free;
End.
</syntaxhighlight>
{{out}}
<pre>
1 has 0 proper divisors:
2 has 1 proper divisors: 1
3 has 1 proper divisors: 1
4 has 2 proper divisors: 1 2
5 has 1 proper divisors: 1
6 has 3 proper divisors: 1 2 3
7 has 1 proper divisors: 1
8 has 3 proper divisors: 1 2 4
9 has 2 proper divisors: 1 3
10 has 3 proper divisors: 1 2 5
15120 has 79 proper divisors
</pre>
 
=={{header|Frink}}==
Line 3,769 ⟶ 3,706:
=={{header|langur}}==
{{trans|Go}}
<syntaxhighlight lang="langur">val .getproper = f(.x) for[=[]] .i of .x \ 2 { if .x div .i: _for ~= [.i] }
val .cntpropergetproper = f(.fn x): for[=0[]] .i of .x \ 2 { if .x div .i: _for +~= 1[i] }
val cntproper = fn x: for[=0] i of x \ 2 { if x div i: _for += 1 }
 
val .listproper = ffn(.x) {
if .x < 1: return null
for[=""] .i of .x {
_for ~= $"\.{{i:2;}} -> \.{{getproper(.i);}}\n"
}
}
 
writeln "The proper divisors of the following numbers are :"
writeln .listproper(10)
 
var .maxmx = 0
var .most = []
for .n in 2 .. 20_000 {
val .cnt = .cntproper(.n)
if .cnt == .maxmx {
.most = more .(most, .n)
} else if .cnt > .maxmx {
.maxmx, .most = .cnt, [.n]
}
}
 
writeln $"The following number(s) <= 20000 have the most proper divisors (\.max;{{mx}})"
writeln .most</syntaxhighlight>
</syntaxhighlight lang="pascal">
 
{{out}}
1,007

edits