Программа в системе PascalABC.Net (время выполнения около 2с) var n1,n2,n3:int64;
function IsPrime(n:Int64):Boolean; var p:Int64; found:Boolean; begin case n of 1:Isprime:=False; 2:IsPrime:=True; else begin found:= (n Mod 2 = 0); p:=3; while (not found) and (sqr(p)<=n) do begin found:=(n Mod p = 0); p:=p+2 end; IsPrime:=(not found) or (p = 2) end end end;
procedure Fib(); begin n3:=n1+n2; n1:=n2; n2:=n3 end;
var i,k:integer; begin n1:=0; n2:=1; k:=0; Writeln('Простые среди первых 45 чисел Фибоначчи'); for i:=3 to 45 do begin Fib; if IsPrime(n3) then begin Write(n3,' '); Inc(k) end end; Writeln(#13#10,'Найдено простых чисел: ',k) end.
Результат выполнения программы: Простые среди первых 45 чисел Фибоначчи 2 3 5 13 89 233 1597 28657 514229 433494437 Найдено простых чисел: 10
Объяснение:
uses GraphABC;
const
Path = 'C:\Ilya\AlgoРитмы\Sankt-Peterburg.txt';
DisplacementX = 10;
DisplacementY = -10;
begin
SetWindowIsFixedSize(true);
var H := Window.Height;
var A := ReadAllText(Path).Replace(',', '.').ToReals();
var StepX := Window.Width / (A.Count - 1);
var Min := Abs(A.Min);
var Max := A.Max() + Min;
var B := A.Select((x, i) -> (x, Round(StepX * i), Round(H - (A[i] + Min) / Max * H))).ToList();
for var i := 0 to B.Count - 2 do
begin
var c := Round(255 - (B[i].Item3 + B[i].Item3) * 0.5 / H * 255);
SetPenColor(RGB(0, c, c));
SetBrushColor(RGB(0, c, c));
Polygon(Arr(new Point(B[i].Item2, H), new Point(B[i].Item2, B[i].Item3),
new Point(B[i + 1].Item2, B[i + 1].Item3), new Point(B[i + 1].Item2, H)));
end;
SetFontColor(clBlack);
SetBrushColor(ARGB(200, 255, 255, 255));
for var i := 0 to B.Count - 1 do
TextOut(B[i].Item2 + DisplacementX, B[i].Item3 + DisplacementY, FloatToStr(B[i].Item1));
end.
Круговая диаграмма
Комментарии к коду [показать]
uses GraphABC;
const
N = 5;
R = 150;
K = 0.7;
var
A: array of integer;
Angle: real;
begin
SetWindowIsFixedSize(true);
SetWindowSize(500, 500);
var W := Window.Width div 2;
var H := Window.Height div 2;
SetLength(A, N);
for var i := 0 to N - 1 do
Readln(A[i]);
var Sum := A.Sum();
SetPenWidth(2);
var R2 := R * K;
for var i := 0 to N - 1 do
begin
var ang := Round(A[i] / Sum * 360);
SetBrushColor(clRandom());
Pie(W, H, R, Round(Angle), Round(Angle - ang));
var ang2 := DegToRad(360 - Angle + ang / 2);
SetBrushColor(clWhite);
TextOut(Round(W + R2 * Cos(ang2)), Round(H + R2 * Sin(ang2)), Format('{0} [~{1}%]', A[i], Round(A[i] / Sum * 100)));
Angle -= ang;
end;
var
n1,n2,n3:int64;
function IsPrime(n:Int64):Boolean;
var
p:Int64;
found:Boolean;
begin
case n of
1:Isprime:=False;
2:IsPrime:=True;
else begin
found:= (n Mod 2 = 0);
p:=3;
while (not found) and (sqr(p)<=n) do
begin found:=(n Mod p = 0); p:=p+2 end;
IsPrime:=(not found) or (p = 2)
end
end
end;
procedure Fib();
begin
n3:=n1+n2; n1:=n2; n2:=n3
end;
var
i,k:integer;
begin
n1:=0; n2:=1; k:=0;
Writeln('Простые среди первых 45 чисел Фибоначчи');
for i:=3 to 45 do
begin
Fib; if IsPrime(n3) then begin Write(n3,' '); Inc(k) end
end;
Writeln(#13#10,'Найдено простых чисел: ',k)
end.
Результат выполнения программы:
Простые среди первых 45 чисел Фибоначчи
2 3 5 13 89 233 1597 28657 514229 433494437
Найдено простых чисел: 10