русский

Мои программы

05.02.25 17:30
Re: Мои программы
 
alek4 старожил
in Antwort alek4 31.01.25 14:13

ПРОГРАММА «Простые 1»

ОГЛАВЛЕНИЕ

1. Общее

2. Математика

3. Вывод

4.Анализ результатов

5. Примеры многочленов

6.Скачать программу «Простые 1

Приложение 1

Распечатка программы «Простые 1»

1. Общее

Не всем дано доказывать теоремы.

Но каждый может внести что-то новое в науку при помощи компьютера.

Моделируя ситуации в разных областях науки.

Это интересней, чем компьютерные игры, которые, по сути, пустая трата времени.

Но для моделирования всяких ситуаций надо владеть какими-то познаниями в программировании. Изучение современных языков трудностей не представляет.

Так для овладения языком Дельфи 7 достаточно месяца три.

2. Математика

Многие многочлены в определенном диапазоне x дают последовательность простых чисел.

Об этом, например, a*x*x +b*x +c

http://vlad-utenkov.narod.ru/personal2/informat/km/pr/pr.h...

Наиболее известный многочлен такого вида открыт Эйлером:

x*x - x + 41

В программе «Простые 1» собирается статистика по значениям квадратных многочленов

a*x*x +b*x +cв диапазоне от 1 до n.

Статистика собирается для двух многочленов:

a*i*i +b*i +cи a1*i*i+b1*i +c1

где i текущая переменная от 1 до n

a, b, c, a1, b1, c1 и nзадаются, как const, в тексте программы.

Такая же статистика и для ряда натуральных чисел.

3. Вывод

Массивы

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,

// Если длина цепей одинакова

const

n =10000;// число вычислений значений многочленови ряда натуральных чисел

// многочлен Эйлера

a=1;

b = -1;

c=41;

// двойник многочлена Эйлера

a1= 4;

b1= -258 ;

c1=4201;

Переменные

a= 1-первый коэффициент многочлена

b= -1 – второй коэффициент многочлена

c=41 – третий коэффициент многочлена

v=0- равна 0, если все величины многочлена больше нуля.

Если величина многочлена меньше или равна нулю,v равно текущему i(x)

z1=4149- число простых

z2=5851- число составных

w=40 – максимальная длина цепи из простых

m=0 -текущее величина цепи из простых

j1=40- величина i в конце максимальной цепи из простых

j2= 1- величина i в начале максимальной цепи из простых

s=19- максимальная длина цепи из составных

t=2- текущее величина цепи из составных

u1=9283- величина i в конце максимальной цепи из составных

u2= 9265 - величина i в начале максимальной цепи из простых

y1= 9999 – величина i для последнего простого из n величин многочлена

s2[n]= 0

d1= 262125,82080 – средняя величиназначений многочлена

h1= 0,4149 – отношение числа простых к n

Вывод для многочлена №2 и ряда натуральных чисел аналогичен

Рядпростых чисел

n4=5736397 – сумма простых

z7=1230- число простых

d4= 4663,73740- средняя величина простого

4.Анализ результатов

4.1. Последовательности от многочленов можно сравнивать по доле простых.

В натуральном ряду среди первых 10000 доля простых – 0,123

4.2. Подбором коэффициентов многочлена можно получить последовательность без простых.

Например, все члены последовательности делятся на 2 или 3.

4.3. Имеется многочлена с простыми и составными, но доля простых мала.

Например

h2= 0,047

a1=1;

b1= -3 ;

c1=17;

4.4.Многочлен Эйлера даёт последовательность в 40 простых чисел при изменении x от1 до 40.

Величины простых чисел возрастают, но их последовательность не совпадает с последовательностью простых натурального ряда.

Для удобства сравнения во множестве простых натурального рядапростые даны с 41, как и для многочлена Эйлера.

4.5. Найден двойник многочлена Эйлера.

a1= 4;

b1= -258 ;

c1=4201

При n=10000 доля простых для многочлена Эйлера- 0, 4149, для двойника – 0, 3802

Тоже цепочка из 40 простых, но при x = 13-52

Величины многочлена в этом диапазоне те же, что и для многочлена Эйлера, но порядок другой.

Результат сравнения множествоs8.

5. Примеры многочленов

// многочлен Эйлера

a=1;

b = -1;

c=41;

// двойник многочлена Эйлера

//a1= 4;

// b1= -258 ;

//c1=4201;

// двойник многочлена Эйлера

//a1= 1;

//b1= -3 ;

//c1=43;

// нетпростых, только чётные

//a1= 1;

// b1= -5 ;

//c1=40;

//мало простыхполовина чётных

//a1= 1;

// b1= -8 ;

//c1=41;

/// очень мало простых половина чётных

//a1= 2;

//b1= -3 ;

//c1=39;

// простых нет все значения делятся на три

//a1=3;

// b1= -3 ;

//c1=39;

// мало простыхh2= 0,047

//a1=1;

//b1= -3 ;

// c1=17;

6.Скачать программу «Простые 1

https://disk.yandex.ru/d/SVq4kurS6Eo6Ug

Приложение 1

Распечатка программы «Простые 1»

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;

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 =10000;// число вычмислений значений многочленов

// многочлен Эйлера

a=1;

b = -1;

c=41;

// двойник многочлена Эйлера

//a1= 4;

// b1= -258 ;

//c1=4201;

// двойник многочлена Эйлера

//a1= 1;

//b1= -3 ;

//c1=43;

// нетпростых, только чётные

//a1= 1;

// b1= -5 ;

//c1=40;

//мало простыхполовина чётных

//a1= 1;

// b1= -8 ;

//c1=41;

/// очень мало проствых половина чётных

//a1= 2;

//b1= -3 ;

//c1=39;

// простых нет все занчения делятся на три

//a1=3;

// b1= -3 ;

//c1=39;

// мало простыхh2= 0,047

//a1=1;

//b1= -3 ;

// c1=17;

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;//

// Функция нахождения простых чисел

// По книгеЖуков "Программируем в 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);

////////////////// a b c

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;

///////////a1 b1 c1

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

beginw1:=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;

/////////////////////////////натуральный ряд чисел

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);

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);

end;

////////////////////////////////////////////////////////////////

procedure TForm1.Button5Click(Sender: TObject);

begin

close

end;

initialization

randomize;

end.

///////////////////////////////////

 

Sprung zu