トップページに戻る    次のProblemへ    前のProblemへ

Problem9 a+b+c=1000となるピタゴラス数

ピタゴラスの3つ組(ピタゴラスの定理を満たす自然数)とはa<b<cで
a*a + b*b = c*c を満たす数の組である

例えば 3*3+4*4 = 9+16 = 25 = 5*5である

a+b+c=1000となるピタゴラスの3つ組が1つだけ存在する。このa,b,cの積を計算しなさい


SQL

--■■■PL/SQLを使う方法■■■
declare
    WillOut VarChar2(100);
    C pls_Integer;
begin
    for A in 1..1000 Loop
        for B in A..1000 Loop
            C := 1000-A-B;
            if A*A+B*B=C*C then
                WillOut := to_char(A) || '*' || to_char(A) || '+'
                        || to_char(B) || '*' || to_char(B) || '='
                        || to_char(C) || '*' || to_char(C) || '='
                        || to_char(C*C);
                DBMS_Output.Put_Line(WillOut);
            end if;
        end Loop;
    end Loop;
end;
/

--■■■SQLで解く方法■■■
with tmp as(
select soeji as Val
  from dual
 model
dimension by(1 as soeji)
measures(0 as dummy)
rules(dummy[for soeji from 1 to 1000 increment 1]= 0))
select a.Val as aVal,b.Val as bVal,c.Val as cVal
  from tmp a,tmp b,tmp c
 where a.Val+b.Val+c.Val = 1000
   and a.Val*a.Val+b.Val*b.Val = c.Val*c.Val
   and a.Val <= b.Val
   and b.Val <= c.Val;


実行結果

200*200+375*375=425*425=180625


解説

SQLで解く方法もあります。

C#での解