- Теория:
- Алгоритмы:
- Числа:
|
ГЛАВА V
ЗАДАЧИ С РЕШЕНИЯМИ
Пифагоровы числа
|
1. Составить программу, которая находит все пифагоровы тройки, не превышающих 20.
2. Найти количество пифагоровых троек не превышающих числа n. n вводится с клавиатуры.
3. Вывести на экран двузначные примитивные пифагоровы тройки.
4. Найти количество трехзначных примитивных пифагоровых троек.
|
1(1). Составить программу, которая находит все пифагоровы тройки, не превышающих 20.
Первый способ решения. Сортировка по возрастанию первого числа.
Ответ:
3 4 5 - пифагоровы
5 12 13 - пифагоровы
6 8 10 - пифагоровы
8 15 17 - пифагоровы
9 12 15 - пифагоровы
12 16 20 - пифагоровы
program pif_01_01;
uses crt;
var
a:integer; {первое число}
b:integer ; {второе число}
c:integer; {третье число}
a1:integer; {первое число в квадрате}
b1:integer; {второе число в квадрате}
c1:integer; {третье число в квадрате}
i:integer; {счетчик цикла}
begin
clrscr;
a:=1 ;
while a<=20 do begin
a1:=SQR(a); {квадрат первого числа}
for b:=a to 20 do
{от a, чтобы убрать повторяющиеся тройки чисел}
begin
b1:=SQR(b); {квадрат второго числа}
for c:=1 to 20 do
begin
c1:=SQR(c); {квадрат третьего числа}
if c1=a1+b1 then writeln (a:5,b:5,c:5,' - пифагоровы');
end; end;
inc(a);
end;
end.
|
1(2). Составить программу, которая находит все пифагоровы тройки, не превышающих 20.
Второй способ решения. Сортировка по возрастанию первого числа.
Ответ:
3 4 5 - пифагоровы
5 12 13 - пифагоровы
6 8 10 - пифагоровы
8 15 17 - пифагоровы
9 12 15 - пифагоровы
12 16 20 - пифагоровы
program pif_01_01;
uses crt;
var a,b,c,cc: integer;
begin clrscr;
for a:=1 to n do
for b:=a to n do
begin
cc:=a*a+b*b;
c:=1;
while (c*c<cc) and (c<20) do inc(c);
If sqr(c)=cc then writeln(a,' ',b,' ',c,' - пифагоровы');
end;
end.
|
1(3). Составить программу, которая находит все пифагоровы тройки, не превышающих 20.
Третий способ решения.
Ответ:
3 4 5
5 12 13
6 8 10
8 15 17
9 12 15
12 16 20
program z1;
uses crt;
var x, y, z:integer; {проверяемые числа}
begin
clrscr;
for x:=1 to 100 do
for y:=x to 20 do
for z:=y to 20 do
if x*x+y*y=z*z then writeln(x:10,y:10,z:10);
end.
|
2. Найти количество пифагоровых троек не превышающих числа n. n вводится с клавиатуры.
Ответ: n=50
Количество пифагоровых троек = 20
program pif_02;
uses crt;
var n:integer;{максимальное число в тройке}
kol:integer; {Количество пифагоровых троек}
a:integer;{первое число}
b:integer ;{второе число}
c:integer;{третье число}
a1:integer;{первое число в квадрате}
b1:integer;{второе число в квадрате}
c1:integer; {третье число в квадрате}
i:integer;{счетчик цикла}
{(3, 4, 5), (6, 8, 10), (5, 12, 13), (9, 12, 15), (8, 15, 17), (12, 16, 20),
(15, 20, 25), (7, 24, 25), (10, 24, 26), (20, 21, 29), (18, 24, 30),
(10, 30, 34), (21, 28, 35), (12, 35, 37), (15, 36, 39), (24, 32, 40),
(9, 40, 41), (27, 35, 45), (14, 48, 50), (30, 40, 50)…}
begin
clrscr;
write('n='); readln(n);
a:=1 ;
while a<=n do begin
a1:=SQR(a);
for b:=a to n do
begin
b1:=SQR(b);
for c:=1 to n do
begin
c1:=SQR(c);
if c1=a1+b1 then inc(kol);
end;
end;
inc(a);
end;
writeln('Количество пифагоровых троек = ',kol)
end.
|
3. Вывести на экран двузначные примитивные пифагоровы тройки.
Ответ:
11 60 61
12 35 37
13 84 85
16 63 65
20 21 29
28 45 53
33 56 65
36 77 85
39 80 89
48 55 73
65 72 97
program pif_03;
uses crt;
var
x, y, z: integer; {проверяемые числа}
min, i, nod1, nod2, nod3: integer; {переменные для поиска НОД}
begin
clrscr;
for x:=10 to 99 do
for y:=x to 99 do
for z:=y to 99 do
if x*x+y*y=z*z then
begin
if x<y then min:=x else min:=y;
for i:=1 to min do
if (x mod i=0) and (y mod i=0) then nod1:=i; {НОД для пары чисел x и y}
if y <z then min:=y else min:=z;
for i:=1 to min do
if (y mod i=0) and (z mod i=0) then nod2:=i;{НОД для пары чисел y и z}
if x <z then min:=x else min:=z;
for i:=1 to min do
if (x mod i=0) and (z mod i=0) then nod3:=i; {НОД для пары чисел x и z}
{если НОДы тройки чисел равны 1 и сами числа пифагоровы,
то тройка чисел - примитивная. Выводим ее на экран: }
if (nod1=1) and (nod2=1) and (nod3=1 ) then
end;
end.
|
4. Найти количество трехзначных примитивных пифагоровых троек.
Ответ: k=97
program pif_04;
uses crt;
var
x, y, z: integer; {проверяемые числа}
min, i, nod1, nod2, nod3: integer; {переменные для поиска НОД}
k: integer; {количество трехзначных примитивных пифагоровых троек}
begin
clrscr;
for x:=100 to 999 do
for y:=x to 999 do
for z:=y to 999 do
if x*x+y*y=z*z then begin
if x<y then min:=x else min:=y;
for i:=1 to min do
if (x mod i=0) and (y mod i=0) then nod1:=i;{НОД для пары чисел x и y}
if y<z then min:=y else min:=z;
for i:=1 to min do
if (y mod i=0) and (z mod i=0) then nod2:=i;{НОД для пары чисел y и z}
if x<z then min:=x else min:=z;
for i:=1 to min do
if (x mod i=0) and (z mod i=0) then nod3:=i; {НОД для пары чисел x и z}
{если НОДы тройки чисел равны 1 и сами числа пифагоровы,
то тройка чисел - примитивная. Увеличим количество примитивных троек на 1}
if ( nod1=1) and (nod2=1) and (nod3=1) then inc(k) ;
end;
writeln('k=',k)
end.
|
|
|
|
|
|
|
|
|
|
|