Proper divisors: Difference between revisions

Content added Content deleted
No edit summary
Line 1,571: Line 1,571:
15120: 79
15120: 79
</pre>
</pre>

Version with TParallel.For
<lang Delphi>
program ProperDivisors;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.SysUtils,
System.Threading,
System.SyncObjs;

type
TProperDivisors = array of Integer;

function GetProperDivisors(const value: Integer): TProperDivisors;
var
i, count: Integer;
begin
count := 0;

for i := 1 to value div 2 do
begin
if value mod i = 0 then
begin
inc(count);
SetLength(result, count);
Result[count - 1] := i;
end;
end;
end;

procedure Println(values: TProperDivisors);
var
i: Integer;
begin
Write('[');
if Length(values) > 0 then
for i := 0 to High(values) do
Write(Format('%2d', [values[i]]));
Writeln(']');
end;

var
number, max_count, count, max_number: Integer;

begin
for number := 1 to 10 do
begin
write(number, ': ');
Println(GetProperDivisors(number));
end;

max_count := 0;
TParallel.for (1, 20000,
procedure(I: Int64)
begin
count := length(GetProperDivisors(I));
if count > max_count then
begin
TInterlocked.Exchange(max_count, count);
TInterlocked.Exchange(max_number, I);
end;
end);

Writeln(max_number, ': ', max_count);
readln;
end.
</lang>


=={{header|Dyalect}}==
=={{header|Dyalect}}==