Мои программы
ПРОГРАММА «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] ofcardinal;//длины маскимальных серий
//простых чисел при разных сочетанияхпервых чисел и величины шага
c: array [1..w,1..m] ofcardinal;
// номер шага началамаксимальных длин серий простых чисел
h: array [1..50] ofcardinal;
//распределениедлинсерий простых чисел
4.3. По матрице ф находится m1 – дли на максимальной серии протычх чисел.
4.4.По числу m1 и матрицам aи c находятся матрицы
p:array [1..10,1..100] ofcardinal;//
//p[1,t] первые числа в максимальной серии
//p[2,t]шагв максимальной серии
//p[3,t]номер шагав максимальной серии
//p[4,t]длинамаксимальной серии
// t- порядковый номер максимальной серии.
//Равен номеру окантовки.
u: array [1..50] of cardinal;
//распределениедлин максимальных серий простыхчисел
h: array [1..50] ofcardinal;
5. Вывод
Выводятся все массивы введенные выше.
Массивы c и a выводятся в одной таблице №1
Пары чисел: ca
6. Итоги
Найдены три сериипо 10 простых.
Первое число – шаг – номер шага – длина серии простых
199210110
21042012610
799420125..10
7. Скачать программу
zip
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] ofcardinal;//длины маскимальных серий
//простых чисел при разных сочетанияхпервых чисел и величины шага
c: array [1..w,1..m] ofcardinal;
// номер шага началамаксимальных длин серий простых чисел
p:array [1..10,1..100] ofcardinal;//
//p[1,t] первые числа в максимальной серии
//p[2,t]шагв максимальной серии
//p[3,t]номер шагав максимальной серии
//p[4,t]длинамаксимальной серии
// t- порядковый номер максимальной серии.
//Равен номеру окантовки.
u: array [1..50] of cardinal;
//распределениедлин максимальных серий простыхчисел
h: array [1..50] ofcardinal;
//расрпределениедлинсерий простых чисел
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) =0then
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)
elseStringGrid2.Cells[0,q]:=IntToStr(q);
for q:=1 to n //нумерация по горизонтали в табл №1 ,
doif good (q) thenStringGrid2.Cells[q,0]:='*'+IntToStr(q)
elseStringGrid2.Cells[q,0]:=IntToStr(q);
for q:= 1 to w// нумерация по вертикалив табл №1 ,
do if good (q) then StringGrid1.Cells[0,q]:='*'+IntToStr(q)
elseStringGrid1.Cells[0,q]:=IntToStr(q);
for q:=1 to m //нумерация по горизонтали в табл №1 ,
doif good (q) thenStringGrid1.Cells[q,0]:='*'+IntToStr(q)
elseStringGrid1.Cells[q,0]:=IntToStr(q);
for q:= 1 to 10// нумерация по вертикалив табл №1 ,
do if good (q) then StringGrid4.Cells[0,q]:='*'+IntToStr(q)
elseStringGrid4.Cells[0,q]:=IntToStr(q);
for q:=1 to 100//нумерация по горизонтали в табл №1 ,
doif good (q) thenStringGrid4.Cells[q,0]:='*'+IntToStr(q)
elseStringGrid4.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:=mato mdo
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 ndobegin
if good (s[i,j]) thenbegin
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])) thenh[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 tom 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 tom do
if a[i,j]=m1 then
m5:= m5+1;
for i:=w1 to w do
for j:=ma tom 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 dobegin
for j:=ma tom 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>0 then
Z:=z+h*i;
for i:=1 to 50 do
if u>0 then
tt:=tt+u*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 mdo
for j:=1 to n doif 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 wdo
for j:=ma to m do
StringGrid1.Cells[j,i]:=
IntToStr( c[i,j])+''+ IntToStr( a[i,j]);
for i:=1 to 5do
for j:=1 to 100 do
if good (p[i,j]) then
StringGrid4.Cells[j,i]:='*'+IntToStr(p[i,j])
elseStringGrid4.Cells[j,i]:= IntToStr(p[i,j]);
for i1:=1 to 50 do
StringGrid4.Cells[i1,7]:= IntToStr(u[i1]);
for i:=1 to 50do
StringGrid4.Cells[i,8]:= IntToStr(h);
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.