ПРОГРАММА «Простые 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.