Прости числа

Прости числа са тези, които нямат други делители, дсвен 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;