Мои программы
ПРОГРАММА «Простые 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.
///////////////////////////////////