ПРОГРАММА «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.