Proper divisors: Difference between revisions
Content added Content deleted
MaiconSoft (talk | contribs) No edit summary |
MaiconSoft (talk | contribs) |
||
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}}== |