Frobenius numbers: Difference between revisions
Content added Content deleted
(Initial post) |
No edit summary |
||
Line 679: | Line 679: | ||
8447 |
8447 |
||
9599</pre> |
9599</pre> |
||
=={{header|Delphi}}== |
|||
{{works with|Delphi|6.0}} |
|||
{{libheader|SysUtils,StdCtrls}} |
|||
<syntaxhighlight lang="Delphi"> |
|||
function IsPrime(N: integer): boolean; |
|||
{Optimised prime test - about 40% faster than the naive approach} |
|||
var I,Stop: integer; |
|||
begin |
|||
if (N = 2) or (N=3) then Result:=true |
|||
else if (n <= 1) or ((n mod 2) = 0) or ((n mod 3) = 0) then Result:= false |
|||
else |
|||
begin |
|||
I:=5; |
|||
Stop:=Trunc(sqrt(N)); |
|||
Result:=False; |
|||
while I<=Stop do |
|||
begin |
|||
if ((N mod I) = 0) or ((N mod (i + 2)) = 0) then exit; |
|||
Inc(I,6); |
|||
end; |
|||
Result:=True; |
|||
end; |
|||
end; |
|||
function GetNextPrime(Start: integer): integer; |
|||
{Get the next prime number after Start} |
|||
begin |
|||
repeat Inc(Start) |
|||
until IsPrime(Start); |
|||
Result:=Start; |
|||
end; |
|||
procedure ShowFrobeniusNumbers(Memo: TMemo); |
|||
var N,N1,FN,Cnt: integer; |
|||
begin |
|||
N:=2; |
|||
Cnt:=0; |
|||
while true do |
|||
begin |
|||
Inc(Cnt); |
|||
N1:=GetNextPrime(N); |
|||
FN:=N * N1 - N - N1; |
|||
N:=N1; |
|||
if FN>10000 then break; |
|||
Memo.Lines.Add(Format('%2d = %5d',[Cnt,FN])); |
|||
end; |
|||
end; |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
1 = 1 |
|||
2 = 7 |
|||
3 = 23 |
|||
4 = 59 |
|||
5 = 119 |
|||
6 = 191 |
|||
7 = 287 |
|||
8 = 395 |
|||
9 = 615 |
|||
10 = 839 |
|||
11 = 1079 |
|||
12 = 1439 |
|||
13 = 1679 |
|||
14 = 1931 |
|||
15 = 2391 |
|||
16 = 3015 |
|||
17 = 3479 |
|||
18 = 3959 |
|||
19 = 4619 |
|||
20 = 5039 |
|||
21 = 5615 |
|||
22 = 6395 |
|||
23 = 7215 |
|||
24 = 8447 |
|||
25 = 9599 |
|||
</pre> |
|||
=={{header|Factor}}== |
=={{header|Factor}}== |