Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Натуральные числа

Автор: Максим 19.10.2004 19:18

Найти все натуральные числа, не превосходящие заданного числа n, представимые в виде суммы квадратов двух каких-нибудь различных натуральных чисел.

Автор: Amro 21.10.2004 14:40

Можно попробывать так, правда вывод плохой ;)
зато всё находит

Код
uses crt;
var
n,f,i,j,nat: integer;
mnoz: set of byte;
begin
clrscr;
write('Задайте число n ');
readln(n);
f:=round(sqrt(n));
for i:=1 to f do
    begin
    for j:=1 to i-1 do
        begin
        nat:=sqr(i)+sqr(j);
        if not (nat in mnoz) then
                             include(mnoz,nat)
                             else nat:=0;
     if (nat<=n)  then
           if nat<>0 then
               write(nat:3);
        end;
    writeln;
    end;
readkey;
end.

Исправленно!!!

Автор: zx1024 21.10.2004 17:33

Второй цикл (по j) нужно пустить не до f, а до i-1.

Автор: Amro 21.10.2004 17:42

Цитата
Второй цикл (по j) нужно пустить не до f, а до i-1.

zx1024 Если сделать так то прога будет находить не все числа!!!
К примеру не будет числа 2, не будет 8-ми, а должно быть!!!
Я согласен с тем что делая второй цикл до f мы перебираем лишнего, но в данной программе быстродействием можно пренебречь ...
Хотя я сам что то глючу, там же сказано разные нат числа, тагды прога будет для двух вариантов
первый если j до i-1
для разных нат чисел, как ты и имел ввиду
второй если J до f
для любых.......

Автор: zx1024 21.10.2004 18:11

В любом случае, если нужны одинаковые, то до i.
2*2 + 5*5 = 5*5 + 2*2.

Автор: Amro 21.10.2004 18:51

Цитата
В любом случае, если нужны одинаковые, то до i.

Точно ....