Мои программы
ПРОГРАММА «Простые 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:=111else
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:=222else
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) =0then
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 ,
doStringGrid2.Cells[0,q]:=IntToStr(q);
// Вычисление коэффициентов многочлена
d:=((k3-2*k2+k1) Mod 2 ) ;
If (d>0) then
fa:=111else
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:=222else
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 ndo
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s1:=(a*i*i + b*i + c);
if s1<=0 then begin v:=i; break
end; end;
for j:= 1 to N dobegin
IF S1[j]> 0 then
if good (s1[j]) then
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s2[j]:=1 ; z1:= z1+1; end
elsebegin s2[j]:=0;z2:= z2+1;
end;end;
// простые - многочлен № 1
for i:=1 to n dobegin
if s2=1 then m:=m+1 ;
if s2 =0 then begin
if m>w then
beginw:=m;j1:= i-1;end;
m:=0
end;
end;
//end;
j2 := j1-w+1;
//составные - многочлен № 1
for i:=1 to n dobegin
if ((s2[i-1] =1) and(s2 =0)) then y1 := i ;
if s2=0 thent:=t+1 ;
if s2 =1 then begin
if t>s then
begins:=t; u1:= i-1;end;
end;
if s2 =1 then t:=0;
end;
u2 := u1-s+1;
end;
///////////a1 b1 c1
if fb =0 then begin
for i:=1 to ndo
begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
s3:=(a1*i*i+ b1*i+ c1);
if s3<=0 then begin v1:=i; break
end; end;
for j:= 1 to N dobegin
Form1.Caption:=IntToStr(GetTickCount-Tick);
IF S3[j]> 0 then
if good (s3[j]) then
begin
s4[j]:=1 ; z3:= z3+1; end
elsebegin s4[j]:=0;z4:= z4+1;
end;end;
m1:=0;
for i:=1 to n dobegin//простые- многгочлен № 2
if s4=1 then m1:=m1+1 ;
if s4 =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 dobegin
if ((s4[i-1] =1) and(s4 =0)) then y2 := i ;
if s4=0 then t1:=t1+1 ;
if s4 =1 then begin
if t1>d then
begind:=t1;u3:= i-1;t1:=0; end;
if s2 =0 then t1 :=0;
end;
end;
u4 := u3-d+1;
end;
/////////////////////////////натуральный ряд чисел
for j:= 1 to N dobegin
if good (j) then
begin
s5[j]:=j ; z5:= z5+1; end
elsebegin s6[j]:=j;z6:= z6+1;
end;end;
m2:=0;
// натуральный ряд составные числа
for i:=1 to n dobegin
if ((s5[i-1] >0) and(s6 >0)) then y3 := i ;
if s5=0 then m2:=m2+1 ;
if s5 >0 then begin
Form1.Caption:=IntToStr(GetTickCount-Tick);
if m2>w2 then
beginw2:=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;
for i:= 1 to n do
n2 := n2 + s3;
for i:= 1 to n do
begin
if s5>0 then n3 := n3+s5;
if s6>0 then n3 := n3+s6;
end;
for i:= 1 to n do
n4 := n4 + s7;
d1 :=n1/n;
d2 :=n2/n;
d3 :=n3/n;
d4 := n4/z7;
for i:= j2 to j1 do
for j:= j4to j3 do
ifs1 = s3[j] then s8 :=s1 ;
//////////////////////////
for i:=1 to ndobegin
StringGrid2.Cells[i,1]:=
IntToStr( s1);
StringGrid2.Cells[i,2]:=
IntToStr( s2);
StringGrid2.Cells[i,4]:=
IntToStr( s3);
StringGrid2.Cells[i,5]:=
IntToStr( s4);
ifs5=0 then
StringGrid2.Cells[i,7]:= '-';
ifs5>0 then
StringGrid2.Cells[i,7]:=IntToStr(i);
ifs5>0 then
StringGrid2.Cells[i,8]:= '-';
ifs5=0 then
StringGrid2.Cells[i,8]:=IntToStr( i);
IntToStr( s6);
StringGrid2.Cells[i,10]:=
IntToStr( s7);
// выоод простых чисел с 41
// if s7>=41 then
// StringGrid2.Cells[i-13,10]:=
// IntToStr( s7);
StringGrid2.Cells[i,10]:=
IntToStr( s7);
end;
for i:=1 to 50do
if i<=w then
StringGrid2.Cells[i,12]:=
IntToStr( s8)
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.
Перейти на |