2017-02-15 3 views
0

Я пытаюсь найти пифагорейские троек с помощью операторов Do и If в Mathematica.Нахождение пифагорейских троек

мне нужно проверить, если два целых числа, (а, б), построить пифагорова тройка, где: = а < = 100 & = Ь < = 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. Любая помощь была бы признательна.

ответ

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

Вероятно, ее предпочтительнее, чтобы сохранить результаты вместо использования Print:

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, 15}, {9, 40, 41}, {10, 24, 26}, {11, 60, 61}, {12, 16, 20}, {12, 35, 37}, {13, 84, 85}, {14, 48, 50}, {15, 20, 25}, {15, 36, 39}, {16, 30, 34}, {16, 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 , 45}, {28, 45, 53}, {28, 96, 100}, {30, 40, 50}, {30, 72, 78}, {32, 60, 68}, {33, 44, 55}, {33, 56, 65}, {35, 84, 91}, {36, 48, 60}, {36, 77, 85}, {39, 52, 65}, {39, 80, 89 }, {40, 42, 58}, {40, 75, 85}, {40, 96, 104}, {42, 56, 70}, {45, 60, 75}, {48, 55, 73 }, {48, 64, 80}, {48, 90, 102}, {51, 68, 85}, {54, 72, 90}, {56, 90, 106}, {57, 76, 95} , {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 , 116}}

Do на самом деле лучше, если вам нужно работать с очень большим n где Subsets будет потреблять много памяти.