2017-02-15 10 views
0

저는 Mathematica에서 Do와 If 문을 사용하여 피타고라스의 트리플을 찾으려고했습니다.피타고라스 트리플을 찾는 것

는 I 테스트해야하는 경우 두 개의 정수 (a, b), 피타고라스 트리플 구성 : 1 <가 < = 100 & & 1 < = B < = 100

If[Element[Sqrt[a^2 + b^2], Integers] && a < b && 
    b < Sqrt[a^2 + b^2], 
Print["(", a, ",", b, ",", Sqrt[a^2 + b^2] ")"]] 

니핏을 =을 실제로 인쇄물에 삼중 피타고라스의 삼중주를 제공하지만 나는 a와 b의 모든 값을 테스트하는 방법에 대해서는 확신하지 못합니다. 도와 주시면 감사하겠습니다. 대신 [Print 사용의 결과 저장

답변

0
Do[ If[ IntegerQ[r = Sqrt[i^2 + j^2]], Print[{i, j, r}]], {i, 
    100}, {j, i - 1}] 

아마도 그 바람직한 ..

Reap[Do[ If[ IntegerQ[r = Sqrt[i^2 + j^2]], Sow[{i, j, r}]], {i, 
    100}, {j, i - 1}]][[2, 1]] 

다른 방법

Cases[Append[#, [email protected]#] & /@ 
    Subsets[Range[100], {2}], {_, _, _Integer}] 

{{3, 4, 5} {5 12, 13}, {6, 8, 10}, {7,24,25}, {8,15,17}, {9,12,}}, {9,40,41} 24, 26}, {11, 60, 61}, {12, 16, 20}, {12,{16, 30, 34}, {16, 30, 34}, {15, 20, 25}, {15, 36, 39} 63, 65}, {18, 24, 30}, {18, 80, 82}, {20, 21, 29}, {20, 48, 52}, {20,99,101}, {21,28 , 35}, {21, 72, 75}, {24,32,40}, {24,45,51}, {24,70,74}, {25,60,65}, {27, 36 {32, 60, 68}, {33, 44, 45}, {45,45,53}, {28,96,100}, {30,40,50}, {} 55}, {33, 56, 65}, {35, 84, 91}, {36, 48, 60}, {36, 77, 85}, {39, 52, 65}, {39, 80, 89 }, {40, 42, }}, {40,75,85}, {40,96,104}, {42,56,70}, {45,60,75}, {48, 55, 73 {56, 90, 106}, {57, 76, 95}, {48,64,80}, {48,90,102}, {51,68,85}, {54,72,} {60, 63, 87}, {60, 80, 100}, {60, 91, 109}, {63, 84, 105}, {65, 72, 97}, {66, 88, 110}, {69, 92, 115}, {72,96,120}, {75,100,125}, {80,84 당신이 Subsets 메모리를 많이 소모합니다 n에 매우 큰 실행해야하는 경우, 116}}

Do 실제로 낫다.