Прости числа
Прости числа са тези, които нямат други делители, дсвен 1 и самото число. 1 не е просто число.
Например 5 е просто, защото се дели единствено на 1 и 5, докато 6 не е, защото се дели освен на 1 и 6 и на 2 и 3.
Първите няколко прости числа са 2, 3, 5, 7, 11, 13 и т. н.
Малкото, което се знае за простите числа е открито от Евклид и Чебишев.
Евклид е доказал, че простите числа са безбройно много.
Това доказателство е едно от най-изяшните доказателства в математиката.
Число, което не е просто се нарича съставно. 1 не е съставно число.
Всяко съставно число се представя по единствен начин като произведение на прости множители.
Ако а е съставно число и числото и a=bc ,то един от делетелите, в или с е по-малък от корен квадратен от а.
Първите 100000 прости числа
Ще направим програма, намираща максимално възможен брой прости числа, записвайки ги във файл.
Ще научим как се работи с "Меню" ( Menu ) и със записващ диалог (Save Dialog).
Дефинираме константа и тип с масив, който ще съдържа първите 100 000 прости числа.
Тези дефиниции трябва непосредствено да прадхождат дефиницията на формата.
const cMAX=100000;
type TPr=record
count:Longint;
Primes:Array [1..cMAX] of Longint;
end;
Променливите са от типа " Longint " – максималният цял тип.
В раздела за дефиниране на променливите на приложението (var), непосредствено под променливата
за формата ( Form1: TForm1; ) декларираме нашата: ( PrL:TPr; )
Във формата добавяме обект от тип "String Grid".
Задействайки инспектора на обектите (Object Inspector) с клавиш F11 променяме броят на колоните му (Col Count) на 1.
Можем да променим и височината на редовете му чрез съответната променлива (Default Row Height) ,
както и ширината на нашата единствена колона.
Поставяме контрол бутон.
Променяме надписа му ( Caption) – "Пр. числа" а името му ( Name) на "BtnnPr"
При двойно натискане на бутона се появява празна процедура, която ще се изпълни при възникването на това събитие.
Коментарите са в черен цвят, но знаем че трябва да ги оградим с фигурни скоби -{ и } или да бъдат предшествани с //,
ако са на един ред, отдясно на командите.
Окончателният и вид е този:
procedure TForm1.BttnPrClick(Sender: TObject);
var Check,i,n,r_i,CountL:Longint;bPr:Boolean;
begin
Check:=5; // Първото число, което ще проверяваме е 5
PrL.Primes[1]:=2; PrL.Primes[2]:=3;PrL.count:=2;// Първите две прости числа.
while PrL.count < cMAX do begin
r_i:=round( sqrt ( Check ) ) + 1;
// Евентуалните делители са по малки корен от проверяемото число.
bPr:=true; // В началото предполагаме, че то е просто.
for i:=2 to r_i do begin
//Check mod i = 0 е остатъкът при деление на Check с i.
if Check mod i = 0 then begin bPr:=false; break; end;// Оказва се че не е.
end;
if bPr then begin inc(PrL.count); PrL.Primes[PrL.count]:=Check; end;
Check:=Check+2; //Непосредствено следващото е четно и проверката няма смисъл
end;
StringGrid1.RowCount:=PrL.count+2; //Променяме броя на редовете на мрежата.
{Нанасяме в нея получените прости числа}
for i:=1 to PrL.count do StringGrid1.Cells[0,i]:=IntToStr(PrL.Primes[i]);
end;
Записването във файл
Ще научим как се работи с "Меню" ( Menu ) и със записващ диалог (Save Dialog).
Във формата добавяме обект от тип записващ диалог (Save Dialog).
Добавяме и обект "меню".
Чрез двойно щракване в него добавяме единиците (Menu Item ) "File" и "Save".
Затваряме помощния прозорец за редаgктиране на менюто. Црез щракване на единицата "Save"
се активизира код, който трябва да бъде преобразуван така:
procedure TForm1.Open1Click(Sender: TObject);
var FN:string; f:TextFile; i:integer;
begin
SaveDialog1.Execute; Задейства се записвашия диалог.
//От него се извлича директорията на новия файл – накратко неговото име
FN := SaveDialog1.FileName+'.txt';
//То се свързва с файла
AssignFile(f,FN);
//Създава се новия файл за записване.
rewrite(f);
//Началото
writeln(f,'Data:');
for i:=1 to PrL.count do
//Записва номерът на простото число и самото него.
begin write(f,i); write(f,' '); writeln(f,PrL.Primes[i]);end;
CloseFile(f);
end;