// floriankirsch.de/c++/tripel.html #include <chrono> #include <cmath> #include <iostream> #include <map> #include <vector> int64_t ggt(int64_t a, int64_t b); // assumes a > b std::vector<int64_t> findDivisors(int64_t c); class TripelPrinter { int64_t c; std::map<int64_t, int64_t> solutions; void print(int64_t a, int64_t b, int64_t c); public: TripelPrinter(int64_t argc); ~TripelPrinter(); void found(int64_t a, int64_t b); void found_uv(int64_t u, int64_t v, int64_t m); }; void findMultipleOfPrimitiveTripel4_OneLoop(int64_t c, int64_t m, TripelPrinter& printer) { int64_t cDivm = c / m; if ((cDivm & 1) == 0) return; int64_t sqrtc = static_cast<int64_t>(std::sqrt(cDivm)); int64_t v = 1; int64_t u = sqrtc; if ((u & 1) != 0) ++u; // ensure that u + v is not even int64_t v2u2_c = (v * v + u * u - cDivm) / 2; while (v < u) { if (v2u2_c == 0) { if (ggt(u, v) == 1) { printer.found_uv(u, v, m); } } v2u2_c += v + 1; ++v; if (v2u2_c < 0) { v2u2_c += v; ++v; } else { v2u2_c -= u; --u; } } } void findTripelEuklid(int64_t c) { TripelPrinter printer(c); auto divisors = findDivisors(c); for (int64_t m : divisors) { findMultipleOfPrimitiveTripel4_OneLoop(c, m, printer); } } int main() { std::cout << "Pythagorean tripels found in 1 millisecond\n"; auto start = std::chrono::steady_clock::now(); for (int64_t c=1; ; ++c) { findTripelEuklid(c); auto duration = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - start); if (duration.count() > 1000) break; } return 0; } int64_t ggt(int64_t a, int64_t b) { if (b == 0) return a; else return ggt(b, a % b); } void addPrimfactors(std::vector<int64_t>& divisors, int64_t p, int n) { auto numDivisors = divisors.size(); int64_t f = p; for (int i = 0; i < n; ++i, f *= p) { for (size_t j = 0; j < numDivisors; ++j) { divisors.push_back(divisors[j] * f); } } } std::vector<int64_t> findDivisors(int64_t c) { std::vector<int64_t> divisors; divisors.reserve(16); divisors.push_back(1); { int n = 0; while ((c & 1) == 0) { c = c / 2; ++n; } addPrimfactors(divisors, 2, n); } int64_t csqrt = static_cast<int64_t>(std::sqrt(c)); for (int64_t p = 3; p <= csqrt; p += 2) { if (c % p != 0) continue; int n = 0; do { c /= p; ++n; } while (c % p == 0); addPrimfactors(divisors, p, n); csqrt = static_cast<int64_t>(std::sqrt(c)); } if (c != 1) addPrimfactors(divisors, c, 1); return divisors; } TripelPrinter::TripelPrinter(int64_t argc) : c(argc) { } TripelPrinter::~TripelPrinter() { for (auto s : solutions) print(s.first, s.second, c); } void TripelPrinter::print(int64_t a, int64_t b, int64_t c) { std::cout << a << "² + " << b << "² = " << c << "²\n"; } void TripelPrinter::found(int64_t a, int64_t b) { if (a * a + b * b != c * c) std::cout << c << ": algorithm error!\n"; else if (solutions.find(a) == solutions.end()) solutions.emplace(a, b); } void TripelPrinter::found_uv(int64_t u, int64_t v, int64_t m) { int64_t a = u * u * m - v * v * m; int64_t b = 2 * u * v * m; if (a < b) found(a, b); else found(b, a); }
Standard input is empty
Pythagorean tripels found in 1 millisecond 3² + 4² = 5² 6² + 8² = 10² 5² + 12² = 13² 9² + 12² = 15² 8² + 15² = 17² 12² + 16² = 20² 7² + 24² = 25² 15² + 20² = 25² 10² + 24² = 26² 20² + 21² = 29² 18² + 24² = 30² 16² + 30² = 34² 21² + 28² = 35² 12² + 35² = 37² 15² + 36² = 39² 24² + 32² = 40² 9² + 40² = 41² 27² + 36² = 45² 14² + 48² = 50² 30² + 40² = 50² 24² + 45² = 51² 20² + 48² = 52² 28² + 45² = 53² 33² + 44² = 55² 40² + 42² = 58² 36² + 48² = 60² 11² + 60² = 61² 16² + 63² = 65² 25² + 60² = 65² 33² + 56² = 65² 39² + 52² = 65² 32² + 60² = 68² 42² + 56² = 70² 48² + 55² = 73² 24² + 70² = 74² 21² + 72² = 75² 45² + 60² = 75² 30² + 72² = 78² 48² + 64² = 80² 18² + 80² = 82² 13² + 84² = 85² 36² + 77² = 85² 40² + 75² = 85² 51² + 68² = 85² 60² + 63² = 87² 39² + 80² = 89² 54² + 72² = 90² 35² + 84² = 91² 57² + 76² = 95² 65² + 72² = 97² 28² + 96² = 100² 60² + 80² = 100² 20² + 99² = 101² 48² + 90² = 102² 40² + 96² = 104² 63² + 84² = 105² 56² + 90² = 106² 60² + 91² = 109² 66² + 88² = 110² 36² + 105² = 111² 15² + 112² = 113² 69² + 92² = 115² 80² + 84² = 116² 45² + 108² = 117² 56² + 105² = 119² 72² + 96² = 120² 22² + 120² = 122² 27² + 120² = 123² 35² + 120² = 125² 44² + 117² = 125² 75² + 100² = 125² 32² + 126² = 130² 50² + 120² = 130² 66² + 112² = 130² 78² + 104² = 130² 81² + 108² = 135² 64² + 120² = 136² 88² + 105² = 137² 84² + 112² = 140² 55² + 132² = 143² 17² + 144² = 145² 24² + 143² = 145² 87² + 116² = 145² 100² + 105² = 145² 96² + 110² = 146² 48² + 140² = 148² 51² + 140² = 149² 42² + 144² = 150² 90² + 120² = 150² 72² + 135² = 153² 93² + 124² = 155² 60² + 144² = 156² 85² + 132² = 157² 84² + 135² = 159² 96² + 128² = 160² 36² + 160² = 164² 99² + 132² = 165² 65² + 156² = 169² 119² + 120² = 169² 26² + 168² = 170² 72² + 154² = 170² 80² + 150² = 170² 102² + 136² = 170² 52² + 165² = 173² 120² + 126² = 174² 49² + 168² = 175² 105² + 140² = 175² 78² + 160² = 178² 108² + 144² = 180² 19² + 180² = 181² 70² + 168² = 182² 33² + 180² = 183² 57² + 176² = 185² 60² + 175² = 185² 104² + 153² = 185² 111² + 148² = 185² 88² + 165² = 187² 114² + 152² = 190² 95² + 168² = 193² 130² + 144² = 194² 48² + 189² = 195² 75² + 180² = 195² 99² + 168² = 195² 117² + 156² = 195² 28² + 195² = 197² 56² + 192² = 200² 120² + 160² = 200² 40² + 198² = 202² 140² + 147² = 203² 96² + 180² = 204² 45² + 200² = 205² 84² + 187² = 205² 123² + 164² = 205² 133² + 156² = 205² 80² + 192² = 208² 126² + 168² = 210² 112² + 180² = 212² 129² + 172² = 215² 120² + 182² = 218² 144² + 165² = 219² 132² + 176² = 220² 21² + 220² = 221² 85² + 204² = 221² 104² + 195² = 221² 140² + 171² = 221² 72² + 210² = 222² 63² + 216² = 225² 135² + 180² = 225² 30² + 224² = 226² 60² + 221² = 229² 138² + 184² = 230² 160² + 168² = 232² 105² + 208² = 233² 90² + 216² = 234² 141² + 188² = 235² 112² + 210² = 238² 144² + 192² = 240² 120² + 209² = 241² 44² + 240² = 244² 147² + 196² = 245² 54² + 240² = 246² 95² + 228² = 247² 70² + 240² = 250² 88² + 234² = 250² 150² + 200² = 250² 39² + 252² = 255² 108² + 231² = 255² 120² + 225² = 255² 153² + 204² = 255² 32² + 255² = 257² 84² + 245² = 259² 64² + 252² = 260² 100² + 240² = 260² 132² + 224² = 260² 156² + 208² = 260² 180² + 189² = 261² 23² + 264² = 265² 96² + 247² = 265² 140² + 225² = 265² 159² + 212² = 265² 117² + 240² = 267² 69² + 260² = 269² 162² + 216² = 270² 128² + 240² = 272² 105² + 252² = 273² 176² + 210² = 274² 77² + 264² = 275² 165² + 220² = 275² 115² + 252² = 277² 168² + 224² = 280² 160² + 231² = 281² 171² + 228² = 285² 110² + 264² = 286² 63² + 280² = 287² 136² + 255² = 289² 161² + 240² = 289² 34² + 288² = 290² 48² + 286² = 290² 174² + 232² = 290² 200² + 210² = 290² 195² + 216² = 291² 192² + 220² = 292² 68² + 285² = 293² 177² + 236² = 295² 96² + 280² = 296² 102² + 280² = 298² 115² + 276² = 299² 84² + 288² = 300² 180² + 240² = 300² 60² + 297² = 303² 55² + 300² = 305² 136² + 273² = 305² 183² + 244² = 305² 207² + 224² = 305² 144² + 270² = 306² 186² + 248² = 310² 120² + 288² = 312² 25² + 312² = 313² 170² + 264² = 314² 189² + 252² = 315² 75² + 308² = 317² 168² + 270² = 318² 220² + 231² = 319² 192² + 256² = 320² 152² + 285² = 323² 36² + 323² = 325² 80² + 315² = 325² 91² + 312² = 325² 125² + 300² = 325² 165² + 280² = 325² 195² + 260² = 325² 204² + 253² = 325² 180² + 273² = 327² 72² + 320² = 328² 198² + 264² = 330² 108² + 315² = 333² 201² + 268² = 335² 175² + 288² = 337² 130² + 312² = 338² 238² + 240² = 338² 45² + 336² = 339² 52² + 336² = 340² 144² + 308² = 340² 160² + 300² = 340² 204² + 272² = 340² 207² + 276² = 345² 104² + 330² = 346² 240² + 252² = 348² 180² + 299² = 349² 98² + 336² = 350² 210² + 280² = 350² 135² + 324² = 351² 225² + 272² = 353² 213² + 284² = 355² 156² + 320² = 356² 168² + 315² = 357² 216² + 288² = 360² 38² + 360² = 362² 140² + 336² = 364² 27² + 364² = 365² 76² + 357² = 365² 219² + 292² = 365² 240² + 275² = 365² 66² + 360² = 366² 81² + 360² = 369² 114² + 352² = 370² 120² + 350² = 370² 208² + 306² = 370² 222² + 296² = 370² 196² + 315² = 371² 252² + 275² = 373² 176² + 330² = 374² 105² + 360² = 375² 132² + 351² = 375² 225² + 300² = 375² 135² + 352² = 377² 145² + 348² = 377² 152² + 345² = 377² 260² + 273² = 377² 228² + 304² = 380² 231² + 308² = 385² 190² + 336² = 386² 260² + 288² = 388² 189² + 340² = 389² 96² + 378² = 390² 150² + 360² = 390² 198² + 336² = 390² 234² + 312² = 390² 184² + 345² = 391² 56² + 390² = 394² 237² + 316² = 395² 228² + 325² = 397² 112² + 384² = 400² 240² + 320² = 400² 40² + 399² = 401² 155² + 372² = 403² 80² + 396² = 404² 243² + 324² = 405² 280² + 294² = 406² 132² + 385² = 407² 192² + 360² = 408² 120² + 391² = 409² 90² + 400² = 410² 168² + 374² = 410² 246² + 328² = 410² 266² + 312² = 410² 264² + 315² = 411² 249² + 332² = 415² 160² + 384² = 416² 252² + 336² = 420² 29² + 420² = 421² 224² + 360² = 424² 65² + 420² = 425² 87² + 416² = 425² 119² + 408² = 425² 180² + 385² = 425² 200² + 375² = 425² 255² + 340² = 425² 297² + 304² = 425² 77² + 420² = 427² 165² + 396² = 429² 258² + 344² = 430² 145² + 408² = 433² 51² + 432² = 435² 72² + 429² = 435² 261² + 348² = 435² 300² + 315² = 435² 240² + 364² = 436² 288² + 330² = 438² 264² + 352² = 440² 42² + 440² = 442² 170² + 408² = 442² 208² + 390² = 442² 280² + 342² = 442² 144² + 420² = 444² 84² + 437² = 445² 195² + 400² = 445² 203² + 396² = 445² 267² + 356² = 445² 153² + 420² = 447² 280² + 351² = 449² 126² + 432² = 450² 270² + 360² = 450² 99² + 440² = 451² 60² + 448² = 452² 112² + 441² = 455² 175² + 420² = 455² 231² + 392² = 455² 273² + 364² = 455² 168² + 425² = 457² 120² + 442² = 458² 216² + 405² = 459² 276² + 368² = 460² 261² + 380² = 461² 320² + 336² = 464² 279² + 372² = 465² 210² + 416² = 466² 180² + 432² = 468² 282² + 376² = 470² 255² + 396² = 471² 133² + 456² = 475² 285² + 380² = 475² 224² + 420² = 476² 252² + 405² = 477² 288² + 384² = 480² 31² + 480² = 481² 156² + 455² = 481² 185² + 444² = 481² 319² + 360² = 481² 240² + 418² = 482² 44² + 483² = 485² 93² + 476² = 485² 291² + 388² = 485² 325² + 360² = 485² 88² + 480² = 488² 294² + 392² = 490² 108² + 480² = 492² 132² + 475² = 493² 155² + 468² = 493² 232² + 435² = 493² 340² + 357² = 493² 190² + 456² = 494² 297² + 396² = 495² 140² + 480² = 500² 176² + 468² = 500² 300² + 400² = 500² 100² + 495² = 505² 217² + 456² = 505² 303² + 404² = 505² 336² + 377² = 505² 195² + 468² = 507² 357² + 360² = 507² 220² + 459² = 509² 78² + 504² = 510² 216² + 462² = 510² 240² + 450² = 510² 306² + 408² = 510² 336² + 385² = 511² 64² + 510² = 514² 309² + 412² = 515² 168² + 490² = 518² 156² + 495² = 519² 128² + 504² = 520² 200² + 480² = 520² 264² + 448² = 520² 312² + 416² = 520² 279² + 440² = 521² 360² + 378² = 522² 147² + 504² = 525² 315² + 420² = 525² 248² + 465² = 527² 46² + 528² = 530² 192² + 494² = 530² 280² + 450² = 530² 318² + 424² = 530² 92² + 525² = 533² 117² + 520² = 533² 205² + 492² = 533² 308² + 435² = 533² 234² + 480² = 534² 321² + 428² = 535² 138² + 520² = 538² 324² + 432² = 540² 341² + 420² = 541² 57² + 540² = 543² 256² + 480² = 544² 33² + 544² = 545² 184² + 513² = 545² 300² + 455² = 545² 327² + 436² = 545² 210² + 504² = 546² 352² + 420² = 548² 99² + 540² = 549² 154² + 528² = 550² 330² + 440² = 550² 380² + 399² = 551² 230² + 504² = 554² 171² + 528² = 555² 180² + 525² = 555² 312² + 459² = 555² 333² + 444² = 555² 165² + 532² = 557² 215² + 516² = 559² 336² + 448² = 560² 264² + 495² = 561² 320² + 462² = 562² 75² + 560² = 565² 276² + 493² = 565² 339² + 452² = 565² 396² + 403² = 565² 231² + 520² = 569² 342² + 456² = 570² 220² + 528² = 572² 126² + 560² = 574² 161² + 552² = 575² 345² + 460² = 575² 48² + 575² = 577² 272² + 510² = 578² 322² + 480² = 578² 285² + 504² = 579² 68² + 576² = 580² 96² + 572² = 580² 348² + 464² = 580² 400² + 420² = 580² 390² + 432² = 582² 308² + 495² = 583² 384² + 440² = 584² 144² + 567² = 585² 225² + 540² = 585² 297² + 504² = 585² 351² + 468² = 585² 136² + 570² = 586² 354² + 472² = 590² 84² + 585² = 591² 192² + 560² = 592² 368² + 465² = 593² 91² + 588² = 595² 252² + 539² = 595² 280² + 525² = 595² 357² + 476² = 595² 204² + 560² = 596² 230² + 552² = 598² 168² + 576² = 600² 360² + 480² = 600² 240² + 551² = 601² 363² + 484² = 605² 120² + 594² = 606² 420² + 441² = 609² 110² + 600² = 610² 272² + 546² = 610² 366² + 488² = 610² 414² + 448² = 610² 235² + 564² = 611² 288² + 540² = 612² 35² + 612² = 613² 135² + 600² = 615² 252² + 561² = 615² 369² + 492² = 615² 399² + 468² = 615² 105² + 608² = 617² 372² + 496² = 620² 273² + 560² = 623² 240² + 576² = 624² 175² + 600² = 625² 220² + 585² = 625² 336² + 527² = 625² 375² + 500² = 625² 50² + 624² = 626² 340² + 528² = 628² 100² + 621² = 629² 204² + 595² = 629² 296² + 555² = 629² 429² + 460² = 629² 378² + 504² = 630² 150² + 616² = 634² 381² + 508² = 635² 336² + 540² = 636² 245² + 588² = 637² 440² + 462² = 638² 384² + 512² = 640² 200² + 609² = 641² 387² + 516² = 645² 304² + 570² = 646² 72² + 646² = 650² 160² + 630² = 650² 182² + 624² = 650² 250² + 600² = 650² 330² + 560² = 650² 390² + 520² = 650² 408² + 506² = 650² 315² + 572² = 653² 360² + 546² = 654² 393² + 524² = 655² 144² + 640² = 656² 432² + 495² = 657² 396² + 528² = 660² 300² + 589² = 661² 63² + 660² = 663² 255² + 612² = 663² 312² + 585² = 663² 420² + 513² = 663² 399² + 532² = 665² 216² + 630² = 666² 460² + 483² = 667² 402² + 536² = 670² 121² + 660² = 671² 385² + 552² = 673² 350² + 576² = 674² 189² + 648² = 675² 405² + 540² = 675² 260² + 624² = 676² 476² + 480² = 676² 52² + 675² = 677² 90² + 672² = 678² 455² + 504² = 679² 104² + 672² = 680² 288² + 616² = 680² 320² + 600² = 680² 408² + 544² = 680² 37² + 684² = 685² 156² + 667² = 685² 411² + 548² = 685² 440² + 525² = 685² 180² + 663² = 687² 111² + 680² = 689² 265² + 636² = 689² 364² + 585² = 689² 400² + 561² = 689² 414² + 552² = 690² 208² + 660² = 692² 417² + 556² = 695² 480² + 504² = 696² 153² + 680² = 697² 185² + 672² = 697² 328² + 615² = 697² 455² + 528² = 697² 360² + 598² = 698² 315² + 624² = 699² 196² + 672² = 700² 420² + 560² = 700² 260² + 651² = 701² 270² + 648² = 702² 228² + 665² = 703² 423² + 564² = 705² 450² + 544² = 706² 140² + 693² = 707² 259² + 660² = 709² 426² + 568² = 710² 312² + 640² = 712² 336² + 630² = 714² 176² + 693² = 715² 275² + 660² = 715² 363² + 616² = 715² 429² + 572² = 715² 432² + 576² = 720² 360² + 627² = 723² 76² + 720² = 724² 85² + 720² = 725² 120² + 715² = 725² 203² + 696² = 725² 333² + 644² = 725² 364² + 627² = 725² 435² + 580² = 725² 500² + 525² = 725² 280² + 672² = 728² 54² + 728² = 730² 152² + 714² = 730² 438² + 584² = 730² 480² + 550² = 730² 344² + 645² = 731² 132² + 720² = 732² 108² + 725² = 733² 441² + 588² = 735² 162² + 720² = 738² 228² + 704² = 740² 240² + 700² = 740² 416² + 612² = 740² 444² + 592² = 740² 285² + 684² = 741² 392² + 630² = 742² 216² + 713² = 745² 255² + 700² = 745² 407² + 624² = 745² 447² + 596² = 745² 504² + 550² = 746² 352² + 660² = 748² 210² + 720² = 750² 264² + 702² = 750² 450² + 600² = 750² 270² + 704² = 754² 290² + 696² = 754² 304² + 690² = 754² 520² + 546² = 754² 453² + 604² = 755² 468² + 595² = 757² 456² + 608² = 760² 39² + 760² = 761² 420² + 637² = 763² 117² + 756² = 765² 324² + 693² = 765² 360² + 675² = 765² 459² + 612² = 765² 295² + 708² = 767² 481² + 600² = 769² 462² + 616² = 770² 96² + 765² = 771² 380² + 672² = 772² 195² + 748² = 773² 217² + 744² = 775² 465² + 620² = 775² 520² + 576² = 776² 252² + 735² = 777² 378² + 680² = 778² 171² + 760² = 779² 192² + 756² = 780² 300² + 720² = 780² 396² + 672² = 780² 468² + 624² = 780² 368² + 690² = 782² 540² + 567² = 783² 56² + 783² = 785² 273² + 736² = 785² 425² + 660² = 785² 471² + 628² = 785² 112² + 780² = 788² 474² + 632² = 790² 105² + 784² = 791² 143² + 780² = 793² 168² + 775² = 793² 305² + 732² = 793² 432² + 665² = 793² 456² + 650² = 794² 69² + 792² = 795² 288² + 741² = 795² 420² + 675² = 795² 477² + 636² = 795² 555² + 572² = 797² 376² + 705² = 799² 224² + 768² = 800² 480² + 640² = 800² 351² + 720² = 801² 80² + 798² = 802² 528² + 605² = 803² 483² + 644² = 805² 310² + 744² = 806² 207² + 780² = 807² 160² + 792² = 808² 280² + 759² = 809² 486² + 648² = 810² 560² + 588² = 812² 264² + 770² = 814² 489² + 652² = 815² 384² + 720² = 816² 240² + 782² = 818² 315² + 756² = 819² 180² + 800² = 820² 336² + 748² = 820² 492² + 656² = 820² 532² + 624² = 820² 429² + 700² = 821² 528² + 630² = 822² 231² + 792² = 825² 495² + 660² = 825² 540² + 629² = 829² 498² + 664² = 830² 345² + 756² = 831² 320² + 768² = 832² 392² + 735² = 833² 501² + 668² = 835² 504² + 672² = 840² 41² + 840² = 841² 580² + 609² = 841² 58² + 840² = 842² 480² + 693² = 843² 116² + 837² = 845² 123² + 836² = 845² 208² + 819² = 845² 325² + 780² = 845² 429² + 728² = 845² 507² + 676² = 845² 595² + 600² = 845² 448² + 720² = 848² 130² + 840² = 850² 174² + 832² = 850² 238² + 816² = 850² 360² + 770² = 850² 400² + 750² = 850² 510² + 680² = 850² 594² + 608² = 850² 276² + 805² = 851² 205² + 828² = 853² 154² + 840² = 854² 513² + 684² = 855² 232² + 825² = 857² 330² + 792² = 858² 516² + 688² = 860² 189² + 840² = 861² 260² + 825² = 865² 287² + 816² = 865² 504² + 703² = 865² 519² + 692² = 865² 290² + 816² = 866² 408² + 765² = 867² 483² + 720² = 867² 102² + 864² = 870² 144² + 858² = 870² 522² + 696² = 870² 600² + 630² = 870² 335² + 804² = 871² 480² + 728² = 872² 585² + 648² = 873² 245² + 840² = 875² 308² + 819² = 875² 525² + 700² = 875² 576² + 660² = 876² 348² + 805² = 877² 204² + 855² = 879² 528² + 704² = 880² 369² + 800² = 881² 84² + 880² = 884² 340² + 816² = 884² 416² + 780² = 884² 560² + 684² = 884² 531² + 708² = 885² 288² + 840² = 888² 168² + 874² = 890² 390² + 800² = 890² 406² + 792² = 890² 534² + 712² = 890² 306² + 840² = 894² 537² + 716² = 895² 345² + 828² = 897² 560² + 702² = 898² 620² + 651² = 899² 252² + 864² = 900² 540² + 720² = 900² 60² + 899² = 901² 424² + 795² = 901² 451² + 780² = 901² 476² + 765² = 901² 198² + 880² = 902² 120² + 896² = 904² 95² + 900² = 905² 464² + 777² = 905² 543² + 724² = 905² 616² + 663² = 905² 180² + 891² = 909² 224² + 882² = 910² 350² + 840² = 910² 462² + 784² = 910² 546² + 728² = 910² 336² + 850² = 914² 165² + 900² = 915² 408² + 819² = 915² 549² + 732² = 915² 621² + 672² = 915² 240² + 884² = 916² 432² + 810² = 918² 552² + 736² = 920² 522² + 760² = 922² 355² + 852² = 923² 43² + 924² = 925² 259² + 888² = 925² 285² + 880² = 925² 300² + 875² = 925² 520² + 765² = 925² 533² + 756² = 925² 555² + 740² = 925² 640² + 672² = 928² 129² + 920² = 929² 558² + 744² = 930² 420² + 832² = 932² 143² + 924² = 935² 396² + 847² = 935² 440² + 825² = 935² 561² + 748² = 935² 360² + 864² = 936² 215² + 912² = 937² 75² + 936² = 939² 564² + 752² = 940² 580² + 741² = 941² 510² + 792² = 942² 207² + 920² = 943² 567² + 756² = 945² 301² + 900² = 949² 365² + 876² = 949² 420² + 851² = 949² 624² + 715² = 949² 266² + 912² = 950² 570² + 760² = 950² 225² + 924² = 951² 448² + 840² = 952² 615² + 728² = 953² 504² + 810² = 954² 573² + 764² = 955² 660² + 693² = 957² 616² + 735² = 959² 576² + 768² = 960² 62² + 960² = 962² 312² + 910² = 962² 370² + 888² = 962² 638² + 720² = 962² 480² + 836² = 964² 124² + 957² = 965² 387² + 884² = 965² 475² + 840² = 965² 579² + 772² = 965² 456² + 855² = 969² 88² + 966² = 970² 186² + 952² = 970² 582² + 776² = 970² 650² + 720² = 970² 108² + 969² = 975² 240² + 945² = 975² 273² + 936² = 975² 375² + 900² = 975² 495² + 840² = 975² 585² + 780² = 975² 612² + 759² = 975² 176² + 960² = 976² 248² + 945² = 977² 429² + 880² = 979² 588² + 784² = 980² 540² + 819² = 981² 216² + 960² = 984² 140² + 975² = 985² 473² + 864² = 985² 591² + 788² = 985² 696² + 697² = 985² 264² + 950² = 986² 310² + 936² = 986² 464² + 870² = 986² 680² + 714² = 986² 380² + 912² = 988² 594² + 792² = 990² 597² + 796² = 995² 372² + 925² = 997² 324² + 945² = 999² 280² + 960² = 1000² 352² + 936² = 1000² 600² + 800² = 1000² 385² + 924² = 1001² 472² + 885² = 1003² 603² + 804² = 1005² 532² + 855² = 1007² 559² + 840² = 1009² 200² + 990² = 1010² 434² + 912² = 1010² 606² + 808² = 1010² 672² + 754² = 1010² 525² + 864² = 1011² 45² + 1012² = 1013² 390² + 936² = 1014² 714² + 720² = 1014² 119² + 1008² = 1015² 168² + 1001² = 1015² 609² + 812² = 1015² 700² + 735² = 1015² 135² + 1008² = 1017² 440² + 918² = 1018² 156² + 1008² = 1020² 432² + 924² = 1020² 480² + 900² = 1020² 612² + 816² = 1020² 660² + 779² = 1021² 672² + 770² = 1022² 64² + 1023² = 1025² 225² + 1000² = 1025² 287² + 984² = 1025² 420² + 935² = 1025² 496² + 897² = 1025² 615² + 820² = 1025² 665² + 780² = 1025² 395² + 948² = 1027² 128² + 1020² = 1028² 618² + 824² = 1030² 192² + 1015² = 1033² 621² + 828² = 1035² 336² + 980² = 1036² 187² + 1020² = 1037² 315² + 988² = 1037² 488² + 915² = 1037² 645² + 812² = 1037² 312² + 990² = 1038² 256² + 1008² = 1040² 400² + 960² = 1040² 528² + 896² = 1040² 624² + 832² = 1040² 558² + 880² = 1042² 357² + 980² = 1043² 720² + 756² = 1044² 627² + 836² = 1045² 540² + 897² = 1047² 320² + 999² = 1049² 294² + 1008² = 1050² 630² + 840² = 1050² 405² + 972² = 1053² 496² + 930² = 1054² 633² + 844² = 1055² 675² + 816² = 1059² 92² + 1056² = 1060² 384² + 988² = 1060² 560² + 900² = 1060² 636² + 848² = 1060² 620² + 861² = 1061² 639² + 852² = 1065² 184² + 1050² = 1066² 234² + 1040² = 1066² 410² + 984² = 1066² 616² + 870² = 1066² 715² + 792² = 1067² 468² + 960² = 1068² 731² + 780² = 1069² 642² + 856² = 1070² 504² + 945² = 1071² 348² + 1015² = 1073² 448² + 975² = 1073² 495² + 952² = 1073² 740² + 777² = 1073² 301² + 1032² = 1075² 645² + 860² = 1075² 276² + 1040² = 1076² 415² + 996² = 1079² 648² + 864² = 1080² 682² + 840² = 1082² 651² + 868² = 1085² 114² + 1080² = 1086² 512² + 960² = 1088² 66² + 1088² = 1090² 368² + 1026² = 1090² 600² + 910² = 1090² 654² + 872² = 1090² 420² + 1008² = 1092² 132² + 1085² = 1093² 81² + 1092² = 1095² 228² + 1071² = 1095² 657² + 876² = 1095² 720² + 825² = 1095² 704² + 840² = 1096² 585² + 928² = 1097² 198² + 1080² = 1098² 595² + 924² = 1099² 308² + 1056² = 1100² 660² + 880² = 1100² 760² + 798² = 1102² 47² + 1104² = 1105² 105² + 1100² = 1105² 169² + 1092² = 1105² 264² + 1073² = 1105² 272² + 1071² = 1105² 425² + 1020² = 1105² 468² + 1001² = 1105² 520² + 975² = 1105² 561² + 952² = 1105² 576² + 943² = 1105² 663² + 884² = 1105² 700² + 855² = 1105² 744² + 817² = 1105² 243² + 1080² = 1107² 460² + 1008² = 1108² 141² + 1100² = 1109² 342² + 1056² = 1110² 360² + 1050² = 1110² 624² + 918² = 1110² 666² + 888² = 1110² 220² + 1089² = 1111² 588² + 945² = 1113² 330² + 1064² = 1114² 669² + 892² = 1115² 235² + 1092² = 1117² 430² + 1032² = 1118² 756² + 825² = 1119² 672² + 896² = 1120² 528² + 990² = 1122² 640² + 924² = 1124² 315² + 1080² = 1125² 396² + 1053² = 1125² 675² + 900² = 1125² 329² + 1080² = 1129² 150² + 1120² = 1130² 552² + 986² = 1130² 678² + 904² = 1130² 792² + 806² = 1130² 405² + 1056² = 1131² 435² + 1044² = 1131² 456² + 1035² = 1131² 780² + 819² = 1131² 681² + 908² = 1135² 462² + 1040² = 1138² 536² + 1005² = 1139² 684² + 912² = 1140² 440² + 1056² = 1144² 300² + 1105² = 1145² 423² + 1064² = 1145² 687² + 916² = 1145² 704² + 903² = 1145² 372² + 1085² = 1147² 252² + 1120² = 1148² 322² + 1104² = 1150² 690² + 920² = 1150² 528² + 1025² = 1153² 96² + 1150² = 1154² 693² + 924² = 1155² 544² + 1020² = 1156² 644² + 960² = 1156² 68² + 1155² = 1157² 445² + 1068² = 1157² 507² + 1040² = 1157² 765² + 868² = 1157² 570² + 1008² = 1158² 209² + 1140² = 1159² 136² + 1152² = 1160² 192² + 1144² = 1160² 696² + 928² = 1160² 800² + 840² = 1160² 780² + 864² = 1164² 204² + 1147² = 1165² 517² + 1044² = 1165² 525² + 1040² = 1165² 699² + 932² = 1165² 616² + 990² = 1166² 567² + 1020² = 1167² 768² + 880² = 1168² 288² + 1134² = 1170² 450² + 1080² = 1170² 594² + 1008² = 1170² 702² + 936² = 1170² 272² + 1140² = 1172² 552² + 1035² = 1173² 329² + 1128² = 1175² 705² + 940² = 1175² 708² + 944² = 1180² 340² + 1131² = 1181² 168² + 1170² = 1182² 455² + 1092² = 1183² 833² + 840² = 1183² 384² + 1120² = 1184² 711² + 948² = 1185² 736² + 930² = 1186² 261² + 1160² = 1189² 611² + 1020² = 1189² 660² + 989² = 1189² 820² + 861² = 1189² 182² + 1176² = 1190² 504² + 1078² = 1190² 560² + 1050² = 1190² 714² + 952² = 1190² 684² + 975² = 1191² 408² + 1120² = 1192² 832² + 855² = 1193² 717² + 956² = 1195² 460² + 1104² = 1196² 660² + 1001² = 1199² 336² + 1152² = 1200² 720² + 960² = 1200² 49² + 1200² = 1201² 480² + 1102² = 1202² 120² + 1197² = 1203² 147² + 1196² = 1205² 476² + 1107² = 1205² 600² + 1045² = 1205² 723² + 964² = 1205² 568² + 1065² = 1207² 465² + 1116² = 1209² 726² + 968² = 1210² 364² + 1155² = 1211² 240² + 1188² = 1212² 245² + 1188² = 1213² 729² + 972² = 1215² 705² + 992² = 1217² 840² + 882² = 1218² 644² + 1035² = 1219² 220² + 1200² = 1220² 544² + 1092² = 1220² 732² + 976² = 1220² 828² + 896² = 1220² 396² + 1155² = 1221² 470² + 1128² = 1222² 576² + 1080² = 1224² 343² + 1176² = 1225² 735² + 980² = 1225² 70² + 1224² = 1226² 360² + 1173² = 1227² 140² + 1221² = 1229² 270² + 1200² = 1230² 504² + 1122² = 1230² 738² + 984² = 1230² 798² + 936² = 1230² 792² + 945² = 1233² 210² + 1216² = 1234² 304² + 1197² = 1235² 475² + 1140² = 1235² 627² + 1064² = 1235² 741² + 988² = 1235² 612² + 1075² = 1237² 744² + 992² = 1240² 280² + 1209² = 1241² 441² + 1160² = 1241² 584² + 1095² = 1241² 816² + 935² = 1241² 165² + 1232² = 1243² 747² + 996² = 1245² 546² + 1120² = 1246² 860² + 903² = 1247² 480² + 1152² = 1248² 799² + 960² = 1249² 350² + 1200² = 1250² 440² + 1170² = 1250² 672² + 1054² = 1250² 750² + 1000² = 1250² 100² + 1248² = 1252² 753² + 1004² = 1255² 680² + 1056² = 1256² 200² + 1242² = 1258² 408² + 1190² = 1258² 592² + 1110² = 1258² 858² + 920² = 1258² 756² + 1008² = 1260² 420² + 1189² = 1261² 485² + 1164² = 1261² 539² + 1140² = 1261² 845² + 936² = 1261² 87² + 1260² = 1263² 759² + 1012² = 1265² 133² + 1260² = 1267² 300² + 1232² = 1268² 762² + 1016² = 1270² 279² + 1240² = 1271² 672² + 1080² = 1272² 490² + 1176² = 1274² 195² + 1260² = 1275² 261² + 1248² = 1275² 357² + 1224² = 1275² 540² + 1155² = 1275² 600² + 1125² = 1275² 765² + 1020² = 1275² 891² + 912² = 1275² 880² + 924² = 1276² 748² + 1035² = 1277² 768² + 1024² = 1280² 231² + 1260² = 1281² 400² + 1218² = 1282² 160² + 1275² = 1285² 637² + 1116² = 1285² 771² + 1028² = 1285² 893² + 924² = 1285² 495² + 1188² = 1287² 560² + 1161² = 1289² 774² + 1032² = 1290² 608² + 1140² = 1292² 399² + 1232² = 1295² 420² + 1225² = 1295² 728² + 1071² = 1295² 777² + 1036² = 1295² 72² + 1295² = 1297² 435² + 1224² = 1299² 144² + 1292² = 1300² 320² + 1260² = 1300² 364² + 1248² = 1300² 500² + 1200² = 1300² 660² + 1120² = 1300² 780² + 1040² = 1300² 816² + 1012² = 1300² 51² + 1300² = 1301² 153² + 1296² = 1305² 216² + 1287² = 1305² 783² + 1044² = 1305² 900² + 945² = 1305² 630² + 1144² = 1306² 720² + 1092² = 1308² 616² + 1155² = 1309² 786² + 1048² = 1310² 288² + 1280² = 1312² 255² + 1288² = 1313² 260² + 1287² = 1313² 505² + 1212² = 1313² 735² + 1088² = 1313² 864² + 990² = 1314² 789² + 1052² = 1315² 792² + 1056² = 1320² 360² + 1271² = 1321² 600² + 1178² = 1322² 115² + 1320² = 1325² 357² + 1276² = 1325² 371² + 1272² = 1325² 480² + 1235² = 1325² 700² + 1125² = 1325² 795² + 1060² = 1325² 884² + 987² = 1325² 126² + 1320² = 1326² 510² + 1224² = 1326² 624² + 1170² = 1326² 840² + 1026² = 1326² 798² + 1064² = 1330² 432² + 1260² = 1332² 920² + 966² = 1334² 252² + 1311² = 1335² 585² + 1200² = 1335² 609² + 1188² = 1335² 801² + 1068² = 1335² 515² + 1236² = 1339² 804² + 1072² = 1340² 459² + 1260² = 1341² 242² + 1320² = 1342² 632² + 1185² = 1343² 345² + 1300² = 1345² 504² + 1247² = 1345² 807² + 1076² = 1345² 833² + 1056² = 1345² 770² + 1104² = 1346² 840² + 1053² = 1347² 700² + 1152² = 1348² 378² + 1296² = 1350² 810² + 1080² = 1350² 665² + 1176² = 1351² 520² + 1248² = 1352² 952² + 960² = 1352² 297² + 1320² = 1353² 104² + 1350² = 1354² 813² + 1084² = 1355² 180² + 1344² = 1356² 910² + 1008² = 1358² 208² + 1344² = 1360² 576² + 1232² = 1360² 640² + 1200² = 1360² 816² + 1088² = 1360² 561² + 1240² = 1361² 940² + 987² = 1363² 336² + 1323² = 1365² 525² + 1260² = 1365² 693² + 1176² = 1365² 819² + 1092² = 1365² 444² + 1295² = 1369² 840² + 1081² = 1369² 74² + 1368² = 1370² 312² + 1334² = 1370² 822² + 1096² = 1370² 880² + 1050² = 1370² 504² + 1275² = 1371² 148² + 1365² = 1373² 360² + 1326² = 1374² 385² + 1320² = 1375² 484² + 1287² = 1375² 825² + 1100² = 1375² 648² + 1215² = 1377² 222² + 1360² = 1378² 530² + 1272² = 1378² 728² + 1170² = 1378² 800² + 1122² = 1378² 196² + 1365² = 1379² 828² + 1104² = 1380² 931² + 1020² = 1381²