ПРОГРАММА «Простые 2»
ОГЛАВЛЕНИЕ
1. Общее
2. Математика
3. Вывод
4. Анализ результатов
5. Скачать программу «Простые 2»
Приложение 1
Распечатка программы «Простые 2»
1. Общее
В программе «Простые 1» исследован многочлен a*x*x +b*x +c в части генерации простых чисел.
Коэффициенты задаются.
В скатерти Улама по диагонали значения этого многочлена при разных последовательностях x.
Для трёх значений предполагаемого многочлена d1, d2, d3 при x1, x2, x3 можно отыскать значения коэффициентов
a, b, c.
2. Математика
Для
x1 =1
x2 = 2
x3=3
коэффициенты находятся по формулам
d:= ((k3-2*k2+k1) Mod 2 ) ;
If (d>0) then
fa:=111 else
begin
a:= (k3-2*k2+k1)div 2;
b:= k2-k1-3*a;
c:= k1-a-b;
end;
d:= ((k6-2*k5+k4) Mod 2 ) ;
If (d>0) then
fb:=222 else
begin
a1:= (k6-2*k5+k4)div 2;
b1:= k5-k4-3*a;
c1:= k4-a-b;
end;
Продолжение расчётов, если коэффициенты целые числа.
Если коэффициенты дробные, выводятся соответственно для многочленов № 1 и № 2:
fa =111 и fb=222.
Дальнейшие вычисления те же, что и в Программе «Простые 1».
3. Вывод
Вывод тот же, что в программе «Простые 1».
Дополнен выводом чисел fa и fb.
4. Анализ результатов
По диагональным числам Скатерти Улама часто удается найти многочлен с большей долей простых чисел, чем в ряду натуральных чисел.
5. Скачать программу «Простые 2»
https://disk.yandex.ru/d/M3YYAVqN3TQuQQ
Приложение 1
Распечатка программы «Простые 2»
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button5: TButton;
Label1: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Edit1: TEdit;
Label2: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label3: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
n =20000;// число вычмислений значений многочленов
// k1 =1499;
// k2=1657;
// k3=1823;
k1 =3463;
k2=3701;
k3=3947;
// fb=222
// k4=2;
// k5=3;
// k6=17;
k4=1823;
k5= 1997;
k6= 2179;
var
Tick: Cardinal;
s1: array [1..n] of integer;// значения многочлена № 1
s2: array [1..n] of integer;// 1 -простое число, 0 - составное число
// многочлен № 1
s3: array [1..n] of integer;// значения многочлена № 2
s4: array [1..n] of integer;// 1 -простое число, 0 - составное число
// многочлен № 21
s5: array [1..n] of integer;// простые числа натурального ряда
s6: array [1..n] of integer;// составные числа нарурального ряда
s7: array [1..n] of integer;//ряд простых чисел
s8: array [1..50] of integer;// сравнение максимальных
//цепей простых чисел в многочленах №1 и №2
r,w, w1, w2, k, f,g, h, ha,q,i,j : integer; //
j1,j2,j3,j4,j5,j6,j7,j8,i2,i1, i3,i4,i5,i6,i7,i8,i9,i0, l: integer; //
x1, x2, z,z1, z2, z3, z4,z5, z6,z7, v,v1,v2, e: integer;//
m, m1, m2, mm, a2,m3,m4,m5 ,vv: integer;//
y, y1, y2,y3, d, p, s, t, u1,u2 , p1, t1, u3,u4 : integer;//
h1,h2,h3: variant;//
n1, n2, n3,n4 : cardinal;//
d1, d2, d3, d4 : variant; //
a, b, c, a1, b1, c1, fa, fb: integer;//
// Функция нахождения простых чисел
// По книге Жуков "Программируем в Delphi"
function good(Numb:integer):boolean;
var
i:integer;
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
good:= true;
for i:=2 to Trunc(Sqrt(Numb)) do
if (Numb mod i) =0 then
begin
good := false;
exit;
end; end;
procedure TForm1.Button1Click(Sender: TObject);
// окантовка
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
for q:=1 to n //нумерация по горизонтали в табл №1 ,
do StringGrid2.Cells[q,0]:=IntToStr(q);
for q:=1 to n // нумерация по вертикали в табл №1 ,
do StringGrid2.Cells[0,q]:=IntToStr(q);
// Вычисление коэффициентов многочлена
d:= ((k3-2*k2+k1) Mod 2 ) ;
If (d>0) then
fa:=111 else
begin
a:= (k3-2*k2+k1)div 2;
b:= k2-k1-3*a;
c:= k1-a-b;
end;
d:= ((k6-2*k5+k4) Mod 2 ) ;
If (d>0) then
fb:=222 else
begin
a1:= (k6-2*k5+k4)div 2;
b1:= k5-k4-3*a;
c1:= k4-a-b;
end;
////////////////// a b c
//////////////////////////////////
if fa=0 then begin
for i:=1 to n do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s1[i]:= (a*i*i + b*i + c) ;
if s1[i]<=0 then begin v:=i; break
end; end;
for j:= 1 to N do begin
IF S1[j]> 0 then
if good (s1[j]) then
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s2[j]:=1 ; z1:= z1+1; end
else begin s2[j]:=0; z2:= z2+1;
end; end;
// простые - многочлен № 1
for i:=1 to n do begin
if s2[i]=1 then m:=m+1 ;
if s2[i] =0 then begin
if m>w then
begin w:=m; j1:= i-1;end;
m:=0
end;
end;
//end;
j2 := j1-w+1;
//составные - многочлен № 1
for i:=1 to n do begin
if ((s2[i-1] =1) and (s2[i] =0)) then y1 := i ;
if s2[i]=0 then t:=t+1 ;
if s2[i] =1 then begin
if t>s then
begin s:=t; u1:= i-1; end;
end;
if s2[i] =1 then t:=0;
end;
u2 := u1-s+1;
end;
/////////// a1 b1 c1
if fb =0 then begin
for i:=1 to n do
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s3[i]:= (a1*i*i+ b1*i + c1) ;
if s3[i]<=0 then begin v1:=i; break
end; end;
for j:= 1 to N do begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
IF S3[j]> 0 then
if good (s3[j]) then
begin
s4[j]:=1 ; z3:= z3+1; end
else begin s4[j]:=0; z4:= z4+1;
end; end;
m1:=0;
for i:=1 to n do begin //простые - многгочлен № 2
if s4[i]=1 then m1:=m1+1 ;
if s4[i] =0 then begin
if m1>w1 then
begin w1:=m1; j3:= i-1;end;
m1:=0
end;
end;
j4 := j3-w1+1;
//составные - многочлен № 2
for i:=1 to n do begin
if ((s4[i-1] =1) and (s4[i] =0)) then y2 := i ;
if s4[i]=0 then t1:=t1+1 ;
if s4[i] =1 then begin
if t1>d then
begin d:=t1; u3:= i-1; t1:=0; end;
if s2[i] =0 then t1 :=0;
end;
end;
u4 := u3-d+1;
end;
///////////////////////////// натуральный ряд чисел
for j:= 1 to N do begin
if good (j) then
begin
s5[j]:=j ; z5:= z5+1; end
else begin s6[j]:=j; z6:= z6+1;
end; end;
m2:=0;
// натуральный ряд составные числа
for i:=1 to n do begin
if ((s5[i-1] >0) and (s6[i] >0)) then y3 := i ;
if s5[i]=0 then m2:=m2+1 ;
if s5[i] >0 then begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
if m2>w2 then
begin w2:=m2; j5:= i-1;end;
m2:=0
end;
end;
j6 := j5-w2+1;
// ряд простых числел
for j:= 1 to N do
if good (j) then
begin
z7:= z7+1; s7[z7]:=j end ;
// частное простых и всех чисел
h1 := z1/n;// многочлен № 1
h2 := z3/n;// многочлен № 2
h3:= z5/n; // ряд натуральных чисел
for i:= 1 to n do
n1 := n1 + s1[i];
for i:= 1 to n do
n2 := n2 + s3[i];
for i:= 1 to n do
begin
if s5[i]>0 then n3 := n3+s5[i];
if s6[i]>0 then n3 := n3+s6[i] ;
end;
for i:= 1 to n do
n4 := n4 + s7[i];
d1 :=n1/n;
d2 :=n2/n;
d3 :=n3/n;
d4 := n4/z7;
for i:= j2 to j1 do
for j:= j4 to j3 do
if s1[i] = s3[j] then s8[i] :=s1[i] ;
//////////////////////////
for i:=1 to n do begin
StringGrid2.Cells[i,1]:=
IntToStr( s1[i]);
StringGrid2.Cells[i,2]:=
IntToStr( s2[i]);
StringGrid2.Cells[i,4]:=
IntToStr( s3[i]);
StringGrid2.Cells[i,5]:=
IntToStr( s4[i]);
if s5[i]=0 then
StringGrid2.Cells[i,7]:= '-';
if s5[i]>0 then
StringGrid2.Cells[i,7]:= IntToStr(i);
if s5[i]>0 then
StringGrid2.Cells[i,8]:= '-';
if s5[i]=0 then
StringGrid2.Cells[i,8]:= IntToStr( i);
IntToStr( s6[i]);
StringGrid2.Cells[i,10]:=
IntToStr( s7[i]);
// выоод простых чисел с 41
// if s7[i]>=41 then
// StringGrid2.Cells[i-13,10]:=
// IntToStr( s7[i]);
StringGrid2.Cells[i,10]:=
IntToStr( s7[i]);
end;
for i:=1 to 50 do
if i<=w then
StringGrid2.Cells[i,12]:=
IntToStr( s8[i])
else StringGrid2.Cells[i,12]:='-';
Edit1.Text :=
'a='+' '+IntToStr(a)+' ' +
'b='+' '+IntToStr(b)+' ' +
'c='+' '+IntToStr(c)+' ' +
'v='+' '+IntToStr(v)+' ' +
'z1='+' '+IntToStr(z1)+' ' +
'z2='+' '+IntToStr(z2)+' ' +
'w='+' '+IntToStr(w) +' ' +
'm='+' '+IntToStr(m) +' ' +
'j1='+' '+IntToStr(j1) +' ' +
'j2='+' '+IntToStr(j2) +' ' +
's='+' '+IntToStr(s) +' ' +
't='+' '+IntToStr(t) +' ' +
'u1='+' '+IntToStr(u1) +' ' +
'u2='+' '+IntToStr(u2) +' ' +
'y1='+' '+IntToStr(y1) +' ' +
's2[n]='+' '+IntToStr(s2[n]) +' ' +
'd1='+' '+ FormatFloat('0.00000',d1) +' ' +
'h1='+' '+ FormatFloat('0.00000',h1);
Edit2.Text :=
'a1='+' '+IntToStr(a1)+' ' +
'b1='+' '+IntToStr(b1)+' ' +
'c1='+' '+IntToStr(c1)+' ' +
'v1='+' '+IntToStr(v1)+' ' +
'z3='+' '+IntToStr(z3)+' ' +
'z4='+' '+IntToStr(z4)+' ' +
'w1='+' '+IntToStr(w1) +' ' +
'm1='+' '+IntToStr(m1) +' ' +
'j3='+' '+IntToStr(j3) +' ' +
'j4='+' '+IntToStr(j4) +' ' +
'd='+' '+IntToStr(d) +' ' +
't1='+' '+IntToStr(t1) +' ' +
'u3='+' '+IntToStr(u3) +' ' +
'u4='+' '+IntToStr(u4) +' ' +
'y2='+' '+IntToStr(y2) +' ' +
's4[n]='+' '+IntToStr(s4[n]) +' ' +
'd2='+' '+ FormatFloat('0.00000',d2) +' ' +
'h2='+' '+ FormatFloat('0.00000',h2);
Edit3.Text :=
'v2='+' '+IntToStr(v2)+' ' +
'z5='+' '+IntToStr(z5)+' ' +
'z6='+' '+IntToStr(z6)+' ' +
'w2='+' '+IntToStr(w2) +' ' +
'm2='+' '+IntToStr(m2) +' ' +
'j5='+' '+IntToStr(j5) +' ' +
'j6='+' '+IntToStr(j6) +' ' +
'y3='+' '+IntToStr(y3) +' ' +
's5[n]='+' '+IntToStr(s5[n]) +' ' +
'd3='+' '+ FormatFloat('0.00000',d3) +' ' +
'h3='+' '+ FormatFloat('0.00000',h3);
Edit4.Text :=
'n4='+' '+IntToStr(n4) +' ' +
'z7='+' '+IntToStr(z7) +' ' +
'd4='+' '+ FormatFloat('0.00000',d4)+' ' +
'fa='+' '+IntToStr(fa) +' ' +
'fb='+' '+IntToStr(fb) ;
end;
///////// ///////////////////////////////////////////////////////
procedure TForm1.Button5Click(Sender: TObject);
begin
close
end;
initialization
randomize;
end.