ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π—Π°Ρ‰ΠΈΡ‚Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

Лабораторная Ρ€Π°Π±ΠΎΡ‚Π°ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΠ΅Ρ€Π²ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌ (ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌ) ΠΊΠΎΡ€Π½Π΅ΠΌ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ P, Π±ΡƒΠ΄Π΅Ρ‚ число g < P ΠΈ Π²Π·Π°ΠΈΠΌΠ½ΠΎ простоС с P, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ d. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ d (дискрСтный Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ числа g ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ P ΠΏΡ€ΠΈ основынии i Ρ‚. Π΅ ΠΈΠ»ΠΈ) являСтся наимСньшим, Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹ΠΌ числом, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ сравнСниС. ΠžΡ‚ΡΡŽΠ΄Π° слСдуСт, Ρ‡Ρ‚ΠΎ для Π²Π·Π°ΠΈΠΌΠ½ΠΎ простых P ΠΈ = P-1 чисСл ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (индСкс) ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π³Π΄Π΅: i = 2,3,4,…, P-2. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π—Π°Ρ‰ΠΈΡ‚Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

1. Π›ΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρ‹ Π‘ΠΎΠ·Π΄Π°Π»Π° собствСнный Π°Π»Ρ„Π°Π²ΠΈΡ‚, ΠΊΠ°ΠΊ массив символов, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ нСпосрСдствСнным описаниСм ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ слСдования символов.

Установила Π² Ρ„ΠΎΡ€ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Button 1−3

Рисунок 1

Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΠΆΠ΅Π½Π΅Ρ€ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ

procedure TForm1. Button3Click (Sender: TObject);

const

A: array[0.15] of char = ('0','1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');

var

i: integer;

begin

Form1.Caption := '';

for i := 0 to 15 do

Form1.Caption := Form1. Caption + A[i] + ' ';

end;

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°Π»Ρ„Π°Π²ΠΈΡ‚, ΠΊΠ°ΠΊ массив символов, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Succ, поэтому я ΡƒΠΊΠ°Π·Π°Π»Π° Π΅Π΅ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ.

procedure TForm1. Button1Click (Sender: TObject);

var

A: array[1.32] of char;

i: integer;

begin

{Π‘Ρ‚Ρ€ΠΎΠ΅ΠΌ Π°Π»Ρ„Π°Π²ΠΈΡ‚}

i := 1;

A[i] := 'А';

Repeat

inc (i, 1);

A[i] := Succ (A[i-1]);

until i >= 32;

Form1.Caption := '';

for i := 1 to 32 do

Form1.Caption := Form1. Caption + A[i] + ' ';

end;

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π°Π»Ρ„Π°Π²ΠΈΡ‚, ΠΊΠ°ΠΊ массив символов, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Pred, ΡƒΠΊΠ°Π·Π°Π² ΠΏΡ€ΠΈ этом ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ послСдний символ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎ ΠΈ ΡΠ΄Π΅Π»Π°Π»ΠΈ.

procedure TForm1. Button2Click (Sender: TObject);

var

A: array[1.32] of char;

i: integer;

begin

i := 1;

A[i] := 'Π―';

Repeat

inc (i, 1);

A[i] := Pred (A[i-1]);

until i >= 32;

Form1.Caption := '';

for i := 1 to 32 do // Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΡ‚ 1 Π΄ΠΎ 32

Form1.Caption := Form1. Caption + A[i] + ' ';

end;

2. Π¨ΠΈΡ„Ρ€ Π’ΠΈΠΆΠ΅Π½Π΅Ρ€Π° — ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡˆΠΈΡ„Ρ€ ЦСзаря, ΡˆΠΈΡ„Ρ€ XOR

Установила Π² Ρ„ΠΎΡ€ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Edit1 (Π²Π²ΠΎΠ΄ пароля), Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° МСмо1,2,3, Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Label 1,2,3 (надписи), Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° GroupBox 1, 2, 3 Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎ 2 ΠΊΠ½ΠΎΠΏΠΊΠΈ Button (Π²ΠΈΠ΄ ΡƒΠΊΠ°Π·Π°Π½ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2).

Рис. 2. РасполоТСниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° использовала Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ASCII (Z-256)

Алгоритм Π’Π˜Π–Π•ΠΠ•Π Π (ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡˆΠΈΡ„Ρ€ ЦСзаря) Π”Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

{Private declarations}

function VCR (PSW, TXT: string; CRT: boolean):string;

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

{Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π”Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Π’ΠΈΠΆΠ΅Π½Π΅Ρ€Ρƒ}

function TForm1. VCR (PSW, TXT: string; CRT: boolean): string;

var

i, NS: integer;

TMP:string;

begin

tmp:='';

NS:=1;

for i:=1 to length (TXT) do

begin

if CRT = true then

TMP := TMP + chr (ord (TXT[i])+ord (PSW[NS]))

else

TMP := TMP + chr ((ord (TXT[i])+256)-ord (PSW[NS]));

NS := NS + 1;

if NS > length (PSW) then NS:=1;

end;

Result:=TMP;

end;

Команда ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

procedure TForm1. Button1Click (Sender: TObject);

begin

Memo2.Text := VCR (Edit1.Text, Memo1. Text, true);

end;

Команда Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

procedure TForm1. Button2Click (Sender: TObject);

begin

Memo3.Text := VCR (Edit1.Text, Memo2. Text, false);

end;

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π»Π° ΠΈ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π»Π° тСкст, измСняя ΠΏΠ°Ρ€ΠΎΠ»ΡŒ) ошибок Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΎΡΡŒ.

Π”Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

{ Private declarations }

function VCR (PSW, TXT: string; CRT: boolean):string;

function CZR (PSW, TXT: string; CRT: boolean):string;

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

function TForm1. CZR (PSW, TXT: string; CRT: boolean):string;

var

i, NS: integer;

TMP:string;

begin

tmp:='';

NS:=1;

for i:=1 to length (TXT) do

begin

if CRT = true then

TMP := TMP + Chr ((Ord (TXT[i]) + Ord (PSW[NS])) mod 256)

else

TMP := TMP + Chr ((Ord (TXT[i]) — Ord (PSW[NS])) mod 256);

NS := NS + 1;

if NS > length (PSW) then NS:=1;

end;

Result:=TMP;

end;

Команда ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

procedure TForm1. Button3Click (Sender: TObject);

begin

Memo2.Text := CZR (Edit1.Text, Memo1. Text, true);

end;

Команда Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

procedure TForm1. Button4Click (Sender: TObject);

begin

Memo3.Text := CZR (Edit1.Text, Memo2. Text, false);

end;

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π»Π° ΠΈ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π»Π° тСкст, измСняя ΠΏΠ°Ρ€ΠΎΠ»ΡŒ) ошибок Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΎΡΡŒ.

УбСдилась, Ρ‡Ρ‚ΠΎ ΡˆΠΈΡ„Ρ€Ρ‹ Π’ΠΈΠΆΠ΅Π½Π΅Ρ€Π° ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡˆΠΈΡ„Ρ€ ЦСзаря Π΄Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‚. Π΅. Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ XOR

Π”Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

{Private declarations}

function VCR (PSW, TXT: string; CRT: boolean):string;

function CZR (PSW, TXT: string; CRT: boolean):string;

function TXT_XOR (PSW, TXT: string):string;

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

function TForm1. TXT_XOR (PSW, TXT: string):string;

var

i, NS: integer;

TMP:string;

begin

tmp:='';

NS:=1;

for i:=1 to length (TXT) do

begin

TMP := TMP + Chr (Ord (TXT[i]) xor Ord (PSW[NS]));

NS := NS + 1;

if NS > length (PSW) then NS:=1;

end;

Result:=TMP;

end;

Команда ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

procedure TForm1. Button5Click (Sender: TObject);

begin

Memo2.Text := TXT_XOR (Edit1.Text, Memo1. Text);

end;

Команда Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

procedure TForm1. Button6Click (Sender: TObject);

begin

Memo3.Text := TXT_XOR (Edit1.Text, Memo2. Text);

end;

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π»Π° ΠΈ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π»Π° тСкст, измСняя ΠΏΠ°Ρ€ΠΎΠ»ΡŒ) ошибок Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΎΡΡŒ.

3. МодСль ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ «Π­ΠΠ˜Π“ΠœΠ»

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π­ΠΠ˜Π“ΠœΠ являСтся сдвиг Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ символа Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, зависимой ΠΎΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ символа Π² Ρ‚СкстС (строкС тСкста). Π’ Π½Π°ΡˆΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сдвига f (x, i) = (Kx * i)^2, Π³Π΄Π΅ i — порядковый Π½ΠΎΠΌΠ΅Ρ€ символа Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅, Kx — ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ (Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠ΅ число = 0, 1, 3, 5, 7,…, n).

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ выступал Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ЦСзаря с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ шагом Π·Π°ΠΌΠ΅Π½Ρ‹.

Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ASCII

(1)

Π”Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ASCII

. (2)

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Kx = 0 ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ci = Ti + 0 (mod 256) ΠΈ Ti = Ci — 0 (mod 256).

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ SpinEdit (ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ), Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Memo 1,2,3 (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ тСкст, ΡˆΠΈΡ„Ρ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ тСкст) ΠΈ Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Button (1 — ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ, 2 — Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ). (располоТили ΠΈΡ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ рисунок Π½ΠΈΠΆΠ΅) Рис. 3. РасполоТСниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ΅ НиТС приводится ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ функция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π΅ΡˆΠΈΡ„рования тСкста ΠΏΠΎ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ. Π’Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

Tx — тСкст ΠΈΠ»ΠΈ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Kx — ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ сдвига ΠΈ Encrupt — Ρ„Π»Π°Π³ Π²ΠΈΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (true — ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅, false — Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся тСкст Π»ΠΈΠ±ΠΎ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

Π”Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

{ Private declarations }

function EnDeCrupt (Tx:String; Kx: Integer; Encrupt: boolean):String;

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

function TForm1. EnDeCrupt (Tx:String; Kx: Integer; Encrupt: boolean):String;

var

i: integer;

X: String;

begin

X:='';

for i :=1 to Length (Tx) do

if Encrupt = true then

X := X + Chr ((Ord (Tx[i]) + Round (SQR (i * Kx))) mod 256)

Else

X := X + Chr ((Ord (Tx[i]) — Round (SQR (i * Kx))) mod 256);

Result := X;

end;

Команда ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

procedure TForm1. Button1Click (Sender: TObject);

begin

Memo2.Text := EnDeCrupt (Memo1.Text, SpinEdit1. Value, true);

end;

Команда Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

procedure TForm1. Button2Click (Sender: TObject);

begin

Memo3.Text := EnDeCrupt (Memo2.Text, SpinEdit1. Value, false);

end;

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΏΡ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… значСниях мноТитСля.

4. Алгоритм рСкурсивного вычислСниС наибольшСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ дСлитСля РСкурсивными ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ (recursive procedure) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ сами сСбя.

Наибольшим ΠΎΠ±Ρ‰ΠΈΠΌ Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ (greatest common divisor, GCD) Π΄Π²ΡƒΡ… чисСл называСтся наибольшСС Ρ†Π΅Π»ΠΎΠ΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ дСлятся Π΄Π²Π° числа Π±Π΅Π· остатка. НапримСр, наибольший ΠΎΠ±Ρ‰ΠΈΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ чисСл 12 ΠΈ 9 Ρ€Π°Π²Π΅Π½ 3. Π”Π²Π° числа Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π·Π°ΠΈΠΌΠ½ΠΎ простыми (relatively prime), Ссли ΠΈΡ… Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΠΈΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Ρ€Π°Π²Π΅Π½ 1.

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊ Π­ΠΉΠ»Π΅Ρ€, Тивший Π² Π²ΠΎΡΠ΅ΠΌΠ½Π°Π΄Ρ†Π°Ρ‚ΠΎΠΌ Π²Π΅ΠΊΠ΅, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» интСрСсный Ρ„Π°ΠΊΡ‚:

Если A Π½Π°Ρ†Π΅Π»ΠΎ дСлится Π½Π° B, Ρ‚ΠΎ GCD (A, B) = A

Π˜Π½Π°Ρ‡Π΅ GCD (A, B) = GCD (B Mod A, A).

Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для быстрого вычислСния наибольшСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ дСлитСля.

НапримСр:

GCD (9, 12)= GCD (12 Mod 9, 9)

GCD (3, 9) = 3

На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС числа становятся всС мСньшС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ 1<= B Mod A < A, Ссли A Π½Π΅ Π΄Π΅Π»ΠΈΡ‚ся Π½Π° B Π½Π°Ρ†Π΅Π»ΠΎ. По ΠΌΠ΅Ρ€Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², A ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1. Π’Π°ΠΊ ΠΊΠ°ΠΊ любоС число дСлится Π½Π° 1 Π½Π°Ρ†Π΅Π»ΠΎ, Π½Π° ΡΡ‚ΠΎΠΌ шагС рСкурсия остановится. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ B Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ся Π½Π° A Π½Π°Ρ†Π΅Π»ΠΎ, ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ.

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π­ΠΉΠ»Π΅Ρ€Π° Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ вычислСния наибольшСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ дСлитСля.

Для выполнСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ использовала Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° SpinEdit ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° Button (рис. 4).

Рис. 4

Π”Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

private

{ Private declarations }

Function GCD (A, B: integer): Integer;

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Function TForm1. GCD (A, B: integer): Integer;

begin

If B Mod A = 0 Then

Result := A

else

Result := GCD (B mod A, A);

end;

Команда Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

procedure TForm1. Button1Click (Sender: TObject);

var

A, B, X: integer;

begin

A := 12; B := 9;

X := GCD (A, B);

if X = 1 then Form1. Caption := 'НСт ΠΠžΠ” !' else Form1. Caption := 'ΠΠžΠ” = ' + IntToStr (X);

end;

5. ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ числа ΠΠ°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число p, большСС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, называСтся простым, Ссли ΠΎΠ½ΠΎ дСлится Π½Π°Ρ†Π΅Π»ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° 1 ΠΈ Π½Π° ΡΠ΅Π±Ρ. Основная Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ гласит, Ρ‡Ρ‚ΠΎ любоС Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число n, большСС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½ΠΎ Π² ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ простых чисСл, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ это Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ СдинствСнно с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎ ΠΏΠΎΡ€ΡΠ΄ΠΊΠ° простых сомноТитСлСй. ΠšΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ числа n ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:, Π³Π΄Π΅: p1 < p2 <…< pk — Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ простыС числа, .

Π—Π°Π΄Π°Ρ‡Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ простоты Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ числа ΠΈ Π·Π°Π΄Π°Ρ‡Π° построСния Π±ΠΎΠ»ΡŒΡˆΠΈΡ… простых чисСл ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π°ΠΆΠ½Ρ‹Π΅ прилоТСния Π² ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ простоты чисСл ΠŸΡƒΡΡ‚ΡŒ n N. Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ n ΠΏΡ€ΠΎΡΡ‚Ρ‹ΠΌ?

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΎΠ±Π½Ρ‹Ρ… Π΄Π΅Π»Π΅Π½ΠΈΠΉ Если n — составноС число, Ρ‚ΠΎ n = ab, Π³Π΄Π΅: 1< a b, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ .

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для d = 2, 3,…, провСряСм, дСлится Π»ΠΈ n Π½Π° d? Если, Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ числа n Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½, Ρ‚ΠΎ n — простоС число. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ простой Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ числа n, Ρ‚. Π΅. ΠΌΡ‹ Π΄Π°ΠΆΠ΅ Ρ€Π°Π·Π»ΠΎΠΆΠΈΠΌ n Π½Π° Π΄Π²Π° мноТитСля.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, дСлится Π»ΠΈ n Π½Π° 2 ΠΈ Π½Π° 3, ΠΈ Π΅ΡΠ»ΠΈ Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ Π΄Π°Π»Π΅Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числа d Π²ΠΈΠ΄Π°: 1 + 6j ΠΈ 5+ 6j Π³Π΄Π΅, j =1, 2,…

Π Π΅ΡˆΠ΅Ρ‚ΠΎ ЭратосфСна Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ всСх простых чисСл Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ чисСл 2, 3,…, N, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ Π²Ρ‹Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ всС числа, дСлящиСся Π½Π° 2, ΠΊΡ€ΠΎΠΌΠ΅ 2. Π—Π°Ρ‚Π΅ΠΌ Π²Π·ΡΡ‚ΡŒ число 3 ΠΈ Π²Ρ‹Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ числа, дСлящиСся Π½Π° 3. Π—Π°Ρ‚Π΅ΠΌ Π²Π·ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅, Π½Π΅ Π²Ρ‹Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΠΎΠ΅ число (Ρ‚. Π΅. 5) ΠΈ Π²Ρ‹Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСлящиСся Π½Π° Π½Π΅Π³ΠΎ числа, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ останутся лишь простыС числа.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ использовала ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ MΠ΅mo ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ Button, Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события OnClick ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ рСализуСтся вычислСниС (Рис. 5).

Рис. 5

ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ созданиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ простых чисСл Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 2 — 255.

procedure TForm1. Button1Click (Sender: TObject);

const N = 255;

type NP = set of 2. N;

var

simple: NP;

i, K, L: integer;

begin

Memo1.Clear;

Memo1.Lines.Add ('ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ числа мСньшиС N: ');

simple :=[2.N];

L := trunc (sqrt (N+1));

K := 1;

while K <= L do //Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Π΄ΠΎ K <= L

begin

repeat K := K+1 until K in simple;

Memo1.Lines.Add (intToStr (K));

for i := 2 to N div K do simple := simple — [K*i];

end;

for K := L+2 to N do

if K in simple then Memo1.Lines.Add (intToStr (K));

end;

ВСст Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠ°Π»ΠΎΠΉ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΡ‹ Π€Π΅Ρ€ΠΌΠ° Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ простоты чисСл n ΠΏΠΎΡ€ΡΠ΄ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΎΠ±Π½Ρ‹Ρ… Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΡƒΠΆΠ΅ Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ тСст основан Π½Π° ΠΌΠ°Π»ΠΎΠΉ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ΅ Π€Π΅Ρ€ΠΌΠ°: Ссли n ΠΏΡ€ΠΎΡΡ‚ΠΎΠ΅, Ρ‚ΠΎ Π΄Π»Ρ любого a Z Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ сравнСниС:

Ссли ΠΆΠ΅ ΠΏΡ€ΠΈ этом (a, n) = 1, Ρ‚ΠΎ:

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ простоты n Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ a Z ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°Π»ΠΎΠΉ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΡ‹ Π€Π΅Ρ€ΠΌΠ° Π·Π° log n Π°Ρ€ΠΈΡ„мСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ возвСдСния Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π² ΠΊΠΎΠ»ΡŒΡ†Π΅ Z/nZ). Если малая Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° Π€Π΅Ρ€ΠΌΠ° Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, Ρ‚ΠΎ n ΡΠ²Π»ΡΠ΅Ρ‚ся составным числом.

Если ΠΆΠ΅ условия Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΎ ΠΏΡ€ΠΎΡΡ‚ΠΎΡ‚Π΅ n, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ° Π΄Π°Π΅Ρ‚ лишь Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ условиС. Π­Ρ‚ΠΎΡ‚ тСст являСтся эффСктивным для обнаруТСния составных чисСл.

НапримСр, для 100-Π·Π½Π°Ρ‡Π½Ρ‹Ρ… чисСл n Π²ΠΈΠ΄Π°:, Π³Π΄Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ»ΠΎΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ тСста, ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π΅ΡΡΡ‚ΡŒ чисСл, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… этот тСст, оказались впослСдствии простыми.

Однако ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ большиС числа, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ числами ΠšΠ°Ρ€ΠΌΠ°ΠΉΠΊΠ»Π°, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… условия тСста Π€Π΅Ρ€ΠΌΠ° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, эти числа ΡΠ²Π»ΡΡŽΡ‚ΡΡ составными. НаимСньшим числом ΠšΠ°Ρ€ΠΌΠ°ΠΉΠΊΠ»Π° являСтся число 561, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ образуСтся ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ простых чисСл 561=3*11*17. Для обнаруТСния Ρ‚Π°ΠΊΠΈΡ… чисСл ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, основанныС Π½Π° Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ°Ρ… Π›Π°Π³Ρ€Π°Π½ΠΆΠ°, Π­Π»Π»Π΅Ρ€Π° ΠΈ Ρ€ΡΠ΄Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠ².

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

НиТС Π½Π°Π²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, наглядно Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ гСнСрирования простых ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для Ρ‚ΠΈΠΏΠ° Integer.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ использовала ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ SpinEdit 1,2 (для Π²Ρ‹Π±ΠΎΡ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° чисСл), ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Memo — для отобраТСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ Button.

Рис. 6. РасполоТСниС элСмСнтов Π² Ρ„ΠΎΡ€ΠΌΠ΅ Ѐункция ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΏΡ€ΠΎΡΡ‚ΠΎΡ‚Ρƒ числа Π’Π°ΠΊ, ΠΊΠ°ΠΊ функция Π½Π΅ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ся Π² Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… дСкларирования Ρ‚ΠΎ, Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ располоТила Π² Unit’e Π²Ρ‹ΡˆΠ΅ Ρ‚Π΅Π»Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ тСста.

function Simple (n:integer):Boolean;

var k: Boolean; i: integer;

begin

k:=true;

if n<>2 then

for i:=2 to trunc (sqrt (n))+1 do

if n mod i = 0 then

begin

k := false;

break;

end;

Result:=k;

end;

Команда тСста Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

procedure TForm1. Button1Click (Sender: TObject);

var

i:integer;

begin

Memo1.Clear;

for i := SpinEdit1. Value to SpinEdit2. Value do

if Simple (i) = true then Memo1.Lines.Add (IntToStr (i));

end;

6. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ псСвдо случайной ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ псСвдослучайных чисСл ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описан Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ:

gi = a gi-1 + b (mod m),

Π³Π΄Π΅: gi — i-ΠΉ Ρ‡Π»Π΅Π½ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ псСвдослучайных чисСл; a, b, m ΠΈ g0 — ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Данная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ состоит ΠΈΠ· Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΎΡ‚ 0 Π΄ΠΎ m-1, ΠΈ Π΅ΡΠ»ΠΈ элСмСнты gi ΠΈ gj совпадут, Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ участки ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ совпадут: gi+1 = gj+1, gi+2 = gj+2, ΠΈ Ρ‚. Π΄.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ {gi} являСтся пСриодичСской, ΠΈ Π΅Π΅ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ m. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ псСвдослучайных чисСл, сгСнСрированной ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ (1), Π±Ρ‹Π» ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ (Ρ€Π°Π²Π½Ρ‹ΠΌ m), ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ (1) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ условиям:

b ΠΈ m —Π²Π·Π°ΠΈΠΌΠ½ΠΎ простыС числа; a-1 дСлится Π½Π° Π»ΡŽΠ±ΠΎΠΉ простой Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ числа m; a-1 ΠΊΡ€Π°Ρ‚Π½ΠΎ 4, Ссли m ΠΊΡ€Π°Ρ‚Π½ΠΎ 4.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹: использовала ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ SpinEdit — для Π²Π²ΠΎΠ΄Π° стартового (сСкрСтного) числа B Π±ΠΎΠ»ΡŒΡˆΠ΅Π³ΠΎ L (255), ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Memo — для отобраТСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° Button (рис. 6).

Рис. 7

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

procedure RND_CODE (X, M: integer; var RCOD: array of integer);

var

i, A: integer;

begin

A:= M + 1;

RCOD[0] := X mod 255;

for i := 1 to M — 1 do

RCOD[i] := (A*RCOD[i-1] + X) mod 255;

end;

Команда создания ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ псСвдо случайных чисСл

procedure TForm1. Button1Click (Sender: TObject);

var

A: array[1.500] of integer;

i, X: integer;

begin

X := SpinEdit1. Value;

RND_CODE (X, High (A), A);

Memo1.Clear;

for i:= 1 to High (A) do

Memo1.Lines.Add ('β„– ' + IntToStr (i) + ' Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числа = ' + IntToStr (A[i]));

end;

7. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π΅ΡˆΠΈΡ„рования тСкста ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ измСнСния ΠΊΠ»ΡŽΡ‡Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° символа Π² Ρ‚СкстС.

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ использовала ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (рис. 7):

SpinEdit 1,2 — Π²Π²ΠΎΠ΄ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ стартового ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ;

Memo 1,2,3 — ΠΎΠΊΠ½Π° Π²Π²ΠΎΠ΄Π° тСкста, прСдставлСния ΡˆΠΈΡ„Ρ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСкста;

Button 1,2 — ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ.

Рис. 8. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ уровня модуля

var

Form1: TForm1;

StartKey, MultKey: integer;

implementation

Ѐункция ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π΅ΡˆΠΈΡ„рования

function CCR (const TXT: string; StartKey, MultKey: Integer; CRT: Boolean): string;

var

i: Integer;

begin

Result:='';

for i:=1 to Length (TXT) do

begin

Result := Result + Chr (Ord (TXT[i]) xor (StartKey shr 8));

if CRT = true then

StartKey := (Ord (Result[i]) + StartKey) * MultKey

else

StartKey:=(Ord (TXT[i]) + StartKey) * MultKey;

end;

Команда ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

procedure TForm1. Button1Click (Sender: TObject);

begin

StartKey := SpinEdit1. Value;

MultKey := SpinEdit2. Value;

Memo3.Text := CCR (Memo2.Text, StartKey, MultKey, true);

end;

Команда Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

procedure TForm1. Button2Click (Sender: TObject);

begin

StartKey := SpinEdit1. Value; // (567) Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ стартового ΠΊΠ»ΡŽΡ‡Π°

MultKey := SpinEdit2. Value; // (18 367) Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ мноТитСля

Memo2.Text:= CCR (Memo1.Text, StartKey, MultKey, false);

end;

8. ВычислСниС ΠΏΠ΅Ρ€Π²ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠ³ΠΎ корня (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Эль-Гамаля) ΠžΠ±Ρ‰ΠΈΠ΅ полоТСния Π’ ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Эль-Гамаля Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ распрСдСлСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π² 1976 Π³ΠΎΠ΄Ρƒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Π£. Π”ΠΈΡ„Ρ„ΠΈ ΠΈ М. Π­. Π₯Π΅Π»Π»ΠΌΠ°Π½Π° «ΠΠΎΠ²Ρ‹Π΅ направлСния Π² ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ».

ΠšΠ»ΡŽΡ‡ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π΅ΡˆΠΈΡ„рования Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ, Π³Π΄Π΅ P — большоС простоС число, g — ΠΏΠ΅Ρ€Π²ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ P. Π‘Π΅ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ число a ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ Ρ†Π΅Π»Ρ‹ΠΌ числом, Π»ΡƒΡ‡ΡˆΠ΅ случайным. Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π° числа Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°.

ΠŸΠ΅Ρ€Π²ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌ (ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌ) ΠΊΠΎΡ€Π½Π΅ΠΌ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ P, Π±ΡƒΠ΄Π΅Ρ‚ число g < P ΠΈ Π²Π·Π°ΠΈΠΌΠ½ΠΎ простоС с P, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ d. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ d (дискрСтный Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ числа g ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ P ΠΏΡ€ΠΈ основынии i Ρ‚. Π΅ ΠΈΠ»ΠΈ) являСтся наимСньшим, Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹ΠΌ числом, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ сравнСниС. ΠžΡ‚ΡΡŽΠ΄Π° слСдуСт, Ρ‡Ρ‚ΠΎ для Π²Π·Π°ΠΈΠΌΠ½ΠΎ простых P ΠΈ = P-1 чисСл ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (индСкс) ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π³Π΄Π΅: i = 2,3,4,…, P-2. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ основаниСм i, (для простого P ΠΈ Π²Π·Π°ΠΈΠΌΠ½ΠΎ простого) ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числа 2 ΠΈ 3, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ Π½Π΅ ΡΠΎΡΡ‚авляСт Ρ‚Ρ€ΡƒΠ΄Π°. НапримСр, для модуля P=11, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΊΠΎΡ€Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ число 2, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ: =, Π³Π΄Π΅: ΠΈ d = 5 =. Для модуля P = 7 ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΊΠΎΡ€Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ число 33(mod 7) = 6, Π° Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠΎΡ€Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚, 53(mod 7) = 6.

ΠŸΠ΅Ρ€Π²ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΡ€Π½ΠΈ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΊΠΎΠ»ΡŒΡ†Π°, которая прСдставляСт ряд чисСл, стСпСни ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… g0, g1, g2,…g Ρ† (m) —1 прСдставляСт собой ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ всСх Π²Π·Π°ΠΈΠΌΠ½ΠΎ простых с m Ρ‡ΠΈΡΠ΅Π», ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… m. Π’ΠΎ Π΅ΡΡ‚ΡŒ gk ΠΏΡ€ΠΎΠ±Π΅Π³Π°Π΅Ρ‚ систСму Π²Ρ‹Ρ‡Π΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ k = 1, 2,… Ρ† (m), Π³Π΄Π΅: Ρ† (m) — функция Π­ΠΉΠ»Π΅Ρ€Π°.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ использовала ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ SpinEdit 1,2,3- для Π²Π²ΠΎΠ΄Π° чисСл, Memo 1,2 — для отобраТСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Button 1,2. (рис. 9)

Рис. 9

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Для вычислСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл Π² Ρ€Π°Π·Π΄Π΅Π» Uses Unit’aΠ²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Math.

РСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²

function Simple (n:integer):Boolean;

var k: Boolean; i: integer;

begin

k:=true;

if n<>2 then

for i:=2 to trunc (sqrt (n))+1 do

if n mod i = 0 then

begin

k := false;

break;

end;

Result:=k;

end;

function IntModPower (A, B, P:integer):integer;

var

x:array of integer;

i:integer;

begin

SetLength (x, P);

x[1]: =A mod P;

for i:=2 to B do

x[i]: =x[i-1] * A mod P;

Result:=x[B];

end;

procedure TForm1. Button1Click (Sender: TObject);

var

i:integer;

begin

Memo1.Clear;

for i := SpinEdit1. Value to SpinEdit2. Value do

if Simple (i) = true then Memo1.Lines.Add (IntToStr (i));

end;

procedure TForm1. Button3Click (Sender: TObject);

var

i, d, P: integer;

begin

Memo2.Clear;

P := SpinEdit3. Value;

d := (P-1) div 2;

for i := 2 to P-2 do

if (IntModPower (i, d, P) = P-1) then

Memo2.Lines.Add ('g = ' + IntToStr (i) + ' (^' + IntToStr (d) + ') = ' + FloatToStr (Power (i, d)));

end;

9. ВычислСниС значСния Π₯Π­Π¨ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сообщСния ВычислСниС значСния Π₯Π­Π¨ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выполняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ посимвольной свСртки сообщСния Π² ΡΠΎΠΎΡ‚вСтствии с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ:, Π³Π΄Π΅: — Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, — Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ символы сообщСния (Ρ‚Π°Π±Π»ΠΈΡ†Π° ASCII).

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (рис. 1) содСрТит Π΄Π²Π° поля Π²Π²ΠΎΠ΄Π° Edit1 ΠΈ Edit2, ΠΊΠ½ΠΎΠΏΠΊΡƒ Button1 ΠΈ Π΄Π²Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ Label1 ΠΈ Label2. Π˜ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΊΠ½ΠΎΠΏΠΊΠΈ onClick.

Рис. 10 Π”ΠΈΠ·Π°ΠΉΠ½ прилоТСния

10. ΠšΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ «ΠŸΡΠ΅Π²Π΄ΠΎΡΠ»ΡƒΡ‡Π°ΠΉΠ½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π°»

Алгоритм основан Π½Π° ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

Ρ€Π°Π²Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π΅ сообщСния M, значСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ Π΄Π»ΠΈΠ½ΠΎΠΉ L. Π“Π΄Π΅: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π°, Π²Π·Π°ΠΈΠΌΠ½ΠΎ простой с M;; , i = 1, 2,…, N < M.

ΠŸΡ€ΠΈ этом общая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄: ΠΈΠ»ΠΈ

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (рис. 2), Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ содСрТит:

Π‘Π΅Ρ‚ΠΊΡƒ StringGrid1, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ для отобраТСния собствСнного Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°, ΠΏΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° Edit1 — Edit5, ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° сСкрСтного числа — SpinEdit1, Ρ‚Ρ€ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Button1 — Button3 ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ Label1 — label5 статичСски ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ.

Рис 11. Π”ΠΈΠ·Π°ΠΉΠ½ прилоТСния.

Π›ΠΈΡ‡Π½Ρ‹ΠΉ Π°Π»Ρ„Π°Π²ΠΈΡ‚ описан глобальной константой A.

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° использовала Ρ‚Ρ€ΠΈ Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° RND_CODE вычисляСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ПБЧ. Ѐункция ALNo Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ символа Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π΅. Ѐункция NoAL Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ символ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€Ρƒ символа Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π΅.

Π’Ρ‹Π²ΠΎΠ΄ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° Π² ΡΠ΅Ρ‚ΠΊΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ создания Ρ„ΠΎΡ€ΠΌΡ‹ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события onCreate.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события onClick ΠΊΠ½ΠΎΠΏΠΊΠΈ Button1.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события onClick ΠΊΠ½ΠΎΠΏΠΊΠΈ Button2.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° очистки ΠΏΠΎΠ»Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события onClick ΠΊΠ½ΠΎΠΏΠΊΠΈ Button3.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ