ПРОГРАММА «2-Арифметическая»

ОГЛАВЛЕНИЕ

1. Сведения об арифметической прогрессии
2 Цель программы
3. Исходные данные
4. Алгоритм
5.Вывод
6. Итоги
7. Скачать программу

Приложение 1
Распечатка программы «2-Арифметическая»

1. Сведения об арифметической прогрессии
Википедия
Арифметическая прогрессия
Материал из Википедии — свободной энциклопедии
Арифмети́ческая прогре́ссия - последовательность чисел (членов прогрессии), в которой каждое число, начиная со второго, получается из предыдущего добавлением к нему постоянного числа  (шага, или разности прогрессии).

2. Цель программы
Программа «2—Арифметическая» есть продолжение исследований про программе «1-Ариметическая». Цель программы изучить закономерности серий простых чисел при разных комбинациях первого числа прогрессии и шага прогрессии.

3. Исходные данные.

Пример
Const
w1=199;//нижняя граница первых чисел арифметической прогресии
   w=1000; //верхняя граница первых чисел арифметической прогресии
    ma =30;// нижняя граница шагов арифметической прогрессии
      m=600;//верхняя  граница шагов арифметической прогрессии
        n=300;// число членов арифметической прогрессии

4. Алгоритм

4.1.  Общий цикл по переменой r.
На каждой итерации первое число равно r.
Генерируются арифметические  прогрессии с шагами от 1 до m.
4.2. На каждой итерации цикла r формируется массивы
s:array [1..m,1..n] of cardinal;//таблица арифметических прогрессий,
//каждая из n элементов, при m величин шагов, вычисляется
//последовательно  для 1-w первых чисел
a: array [1..w, 1..m] of  cardinal;//длины маскимальных серий
//простых чисел при разных сочетаниях  первых чисел и величины шага
c: array [1..w,1..m] of  cardinal;
// номер шага начала  максимальных длин серий простых чисел         
h: array [1..50] of  cardinal;
//распределение  длин  серий простых чисел
4.3. По матрице ф находится m1 – дли на максимальной серии протычх чисел.
4.4.По числу m1 и матрицам a  и c находятся матрицы
        p:  array [1..10,1..100] of  cardinal;//
        //p[1,t] первые числа в максимальной серии
         //p[2,t]шаг  в максимальной серии
          //p[3,t]номер шага  в максимальной серии
           //p[4,t]длина  максимальной серии
          // t- порядковый номер максимальной серии.
          //Равен номеру окантовки.
u: array [1..50] of cardinal;
//распределение  длин максимальных серий простых  чисел
h: array [1..50] of  cardinal;

5. Вывод
Выводятся все массивы введенные выше.
Массивы c и a выводятся в одной таблице №1
Пары чисел: c  a

6. Итоги
Найдены  три серии  по 10 простых.
Первое число – шаг – номер шага – длина серии простых
199  210  1  10
210  420  126  10
799  420  125..10

7. Скачать программу
zip

[/b][/size]
https://disk.yandex.ru/d/gCPBHHR82Djq8Q
Приложение 1

Распечатка программы  2-Арифметическая

unit Unit1;

interface

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;
    Label4: TLabel;
    StringGrid1: TStringGrid;
    StringGrid4: TStringGrid;
    Edit2: TEdit;

    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
          const

{ w1=4;//нижняя граница начальных чисел арифметической прогресии
   w=40 ;//верхняя граница начальных чисел арифметической прогресии
    ma =1;// нижняя граница шагов арифметической прогрессии
      m=12;//верхняя  граница шагов арифметической прогрессии
        n=25;// число членов арифметической прогрессии }
         w1=1;//нижняя граница первых чисел арифметической прогресии
   w=1500; //верхняя граница первых чисел арифметической прогресии
    ma =300;// нижняя граница шагов арифметической прогрессии
     m=300;//верхняя  граница шагов арифметической прогрессии
        n=1000;// число членов арифметической прогрессии

      var
       Tick: Cardinal;

s:array [1..m,1..n] of cardinal;//таблица арифметических прогрессий,
//каждая из n элементов, при m величин шагов, вычисляется
//последовательно  для 1-w первых чисел
a: array [1..w, 1..m] of  cardinal;//длины маскимальных серий
//простых чисел при разных сочетаниях  первых чисел и величины шага
c: array [1..w,1..m] of  cardinal;
// номер шага начала  максимальных длин серий простых чисел
        p:  array [1..10,1..100] of  cardinal;//
        //p[1,t] первые числа в максимальной серии
         //p[2,t]шаг  в максимальной серии
          //p[3,t]номер шага  в максимальной серии
           //p[4,t]длина  максимальной серии
          // t- порядковый номер максимальной серии.
          //Равен номеру окантовки.
u: array [1..50] of cardinal;
//распределение  длин максимальных серий простых  чисел
h: array [1..50] of  cardinal;
//расрпределение  длин  серий простых чисел

i,j,q ,z,r,i1,j1,tt,t,k,x,e ,aa,v,d,y:  cardinal;
   n1, n2, n3,n4    : cardinal;//
   m1,m2,m3,m4,m5: cardinal;//
   f1,f2,f3,f4,f5   :  cardinal;//
   // Функция нахождения простых чисел
     // По книге    Жуков "Программируем в 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
         for q:=1 to m   // нумерация по вертикали  в табл №1 ,
     do if good (q) then StringGrid2.Cells[0,q]:='*'+IntToStr(q)
       else      StringGrid2.Cells[0,q]:=IntToStr(q);
    for q:=1 to n //нумерация по горизонтали в табл №1 ,
     do   if good (q) then  StringGrid2.Cells[q,0]:='*'+IntToStr(q)
    else  StringGrid2.Cells[q,0]:=IntToStr(q);

for q:= 1 to w   // нумерация по вертикали  в табл №1 ,
     do if good (q) then StringGrid1.Cells[0,q]:='*'+IntToStr(q)
       else      StringGrid1.Cells[0,q]:=IntToStr(q);
    for q:=1 to m //нумерация по горизонтали в табл №1 ,
     do   if good (q) then  StringGrid1.Cells[q,0]:='*'+IntToStr(q)
    else  StringGrid1.Cells[q,0]:=IntToStr(q);

             for q:= 1 to 10   // нумерация по вертикали  в табл №1 ,
     do if good (q) then StringGrid4.Cells[0,q]:='*'+IntToStr(q)
       else      StringGrid4.Cells[0,q]:=IntToStr(q);
    for q:=1 to 100//нумерация по горизонтали в табл №1 ,
     do   if good (q) then  StringGrid4.Cells[q,0]:='*'+IntToStr(q)
    else  StringGrid4.Cells[q,0]:=IntToStr(q);
            //////////////////

            aa:=((2*3)*(5*7)) ;
                          for r:= w1 to w do
                                begin
                                n1:=0; n2:=0;
               for i:=ma to m do
             for j:=1 to n do
              s[i,j] :=0;

       for i:=ma   to m    do
                   s[i,1] :=r;

     for I:=ma to m do
for J:=2 to n do
s[i,J] :=  s[i,J-1] +i;

      //отыскание максимальных  серий    простых чисел
      //вычисление матрицы     с[i,j]
      for I:=ma to m do begin
   n2:=0;    n1:=0;
   for J:=1 to n   do   begin
      if good (s[i,j]) then  begin
    x:=1;     n2:=n2+1 ;  d:=d+1;   END;
          if good (s[i,j])=FALSE then
          begin
            h[n2] := h[n2] +1;
          v:= v+1;
          end;
           if (good (s[i,j])=FALSE )AND (N2>N1)
                   then begin
        n1:= n2; n2:=0; a[r,i] :=  n1;
        n4:=j;  c[r,i] := J-n1;
                    end;
if (((j=n) and  (n2>0))and good (s[i,j])) then  h[n2] := h[n2] +1;
                   if j=n then
                  if ((good (s[i,j])AND (N2>N1)  ))
                   then begin
  n1:= n2;  h[n1] := h[n1] +1; n2:=0; a[r,i] :=  n1; n4:=j;
   c[r,i] := J;
                    end;
                    if (good (s[i,j])=FALSE )  then n2:=0;
                 end;
                  if x=0 then e:=e+1;
                    x:=0;
                 end; 
                  end;
                     /////////   распределение серий по длине
                        /////////////////////////////
                    //отыскание максимальной серии
                 for i:=w1 to w do
                 for j:=ma to   m do
                    if a[i,j] >m1 then
                    begin m1:= a[i,j]; m2:=i; m3:= j;m4:=c[i,j];
                    end;

                    for i:=w1 to w do
                 for j:=ma to   m do
                    if a[i,j]=m1 then
                   m5:= m5+1;

                    for i:=w1 to w do
                 for j:=ma to   m do
                if a[i,j] = m1 then begin
k:=k+1;  p[1,k] :=i;  p[2,k]:=j; p[3,k] := c[i,j]; p[4,k] := m1;
                end;
                        u[50]:=0;
                for i:=w1 to w do  begin
                 for j:=ma to   m do
                    if a[i,j]>0 then
                    begin
           t:=a[i,j];
          u[t]:=u[t] +1;
                    end;
                      end;
                 for i:=1 to 50 do
                 if h[i]>0 then
                    Z:=z+h[i]*i;

                     for i:=1 to 50 do
                     if u[i]>0 then
                      tt:=tt+u[i]*i;

              y:= v+d;
              StringGrid2.Cells[0,0] := 's[..]';
            StringGrid1.Cells[0,0] := 'a[]c[]';
                  StringGrid4.Cells[0,0] := '№ 4';
                      StringGrid4.Cells[0,1] := 'p[1,k]';
                            StringGrid4.Cells[0,2] := 'p[2,k]';
                      StringGrid4.Cells[0,3] := 'p[3,k]';
                        StringGrid4.Cells[0,4] := 'p[4,k]';
                         StringGrid4.Cells[0,7] := 'u[1..50]';
                          StringGrid4.Cells[0,8] := 'h[1..50]';

        Form1.Caption:=IntToStr(GetTickCount-Tick);
          for i:=1 to m   do
   for j:=1 to n do    if s[i,j]>0 then
     if good (s[i,j]) then StringGrid2.Cells[j,i]:='*'+ ' '+ IntToStr(s[i,j])
else StringGrid2.Cells[j,i]:= IntToStr(s[i,j]);

             Form1.Caption:=IntToStr(GetTickCount-Tick);
           for i:=w1 to w   do
   for j:=ma to m do
      StringGrid1.Cells[j,i]:=
   IntToStr( c[i,j])+'   '+ IntToStr( a[i,j]);

       for i:=1 to 5   do
   for j:=1 to 100 do
      if good (p[i,j]) then
  StringGrid4.Cells[j,i]:='*'+IntToStr(p[i,j])
  else   StringGrid4.Cells[j,i]:= IntToStr(p[i,j]);

            for i1:=1 to 50 do
       StringGrid4.Cells[i1,7]:= IntToStr(u[i1]);

               for i:=1 to 50   do
         StringGrid4.Cells[i,8]:= IntToStr(h[i]);

        Edit1.Text :='n1=' +'  '+ IntToStr(n1)+'  '+
        'n2=' +'  '+ IntToStr(n2)
        +'  '+ 'n3=' +'  '+ IntToStr(n3)
          +'  '+ 'n4=' +'  '+ IntToStr(n4)
       +'  '+ 'm1=' +'  '+ IntToStr(m1)
        +'  '+ 'm2=' +'  '+ IntToStr(m2)
          +'  '+ 'm3=' +'  '+ IntToStr(m3)
    +'  '+ 'm4=' +'  '+ IntToStr(m4)
    +'  '+ 'm5=' +'  '+ IntToStr(m5)
         +'  '+ 'f1=' +'  '+ IntToStr(f1)
       +'  '+ 'f2=' +'  '+ IntToStr(f2)
          +'  '+ 'h[1]=' +'  '+ IntToStr(h[1])
      +'  ' +' h[2] '+  '  '+ IntToStr(h[2])
          +'  ' +'v=  '+ '  '+ IntToStr(v)
      +'  '  + 'd=' +'  '+ IntToStr(d)
       +'  '  + 'y=' +'  '+ IntToStr(y) ;

                     Edit2.Text :=   IntToStr(u[50])
      +'  '  +        'z=' +'  '+ IntToStr(z)
       +'  '  + ' tt=' +'  '+ IntToStr(tt)
      +'  '  + ' e=' +'  '+ IntToStr(e)
         +'  '  + ' x=' +'  '+ IntToStr(x)
           +'  '  + ' aa=' +'  '+ IntToStr(aa);

        Form1.Caption:=IntToStr(GetTickCount-Tick);
                         end;
  /////////  ///////////////////////////////////////////////////////

        procedure TForm1.Button5Click(Sender: TObject);
begin
      close
end;
         initialization
randomize;
end.