1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
#include <vector> // std::vector
#include <algorithm> // std::sort
#include <iostream> // std::ostream, std::cout, std::endl
// Structure to hold triples
struct triple
{
int a;
int b;
int c;
bool operator< (triple& t) { return c < t.c; } // Operator function used in std::sort()
};
// Function to print triples
std::ostream& operator << (std::ostream& o, triple& t)
{
return o << "a: " << t.a << "\tb: " << t.b << "\tc: " << t.c << std::endl;
}
// Helper function to check if two integers are coprime
bool isCoprime(int m, int n)
{
for (int i = 2; i < n/2; ++i)
if (m%i==0 && n%i==0) // if they can be divided evenly by the same number, they are not coprime
return false;
return true;
}
void getPythagoreanTriples(int max, std::vector<triple>& set)
{
for (int m = 2; m <= max; ++m)
{
for (int n = 1; n < m; ++n) // n cannot be bigger than m
{
if ( isCoprime(m,n) && ((m-n)%2==1)) // if m and n are coprime and the diff is odd, we have a triple
{
triple temp;
temp.a = m*m - n*n; // using Euclid's formula to calculate a,b,c
temp.b = 2*m*n;
temp.c = m*m + n*n;
if (temp.c > max) return; // When C is larger than 500, return
set.push_back(temp); // otherwise add the triple to our set.
}
}
}
}
int main()
{
// Make a container to hold all triples
std::vector<triple> PythagoreanTriples;
// Fill the container with all triples
getPythagoreanTriples(500, PythagoreanTriples);
// Sort the triples
std::sort(PythagoreanTriples.begin(), PythagoreanTriples.end());
// Print the triples
for (std::vector<triple>::iterator it = PythagoreanTriples.begin(); it != PythagoreanTriples.end(); ++it)
std::cout << *it;
return 0;
}
|
a: 3 b: 4 c: 5
a: 5 b: 12 c: 13
a: 15 b: 8 c: 17
a: 7 b: 24 c: 25
a: 21 b: 20 c: 29
a: 35 b: 12 c: 37
a: 9 b: 40 c: 41
a: 45 b: 28 c: 53
a: 11 b: 60 c: 61
a: 33 b: 56 c: 65
a: 63 b: 16 c: 65
a: 55 b: 48 c: 73
a: 13 b: 84 c: 85
a: 77 b: 36 c: 85
a: 39 b: 80 c: 89
a: 65 b: 72 c: 97
a: 99 b: 20 c: 101
a: 91 b: 60 c: 109
a: 15 b: 112 c: 113
a: 117 b: 44 c: 125
a: 105 b: 88 c: 137
a: 17 b: 144 c: 145
a: 143 b: 24 c: 145
a: 51 b: 140 c: 149
a: 85 b: 132 c: 157
a: 119 b: 120 c: 169
a: 165 b: 52 c: 173
a: 19 b: 180 c: 181
a: 57 b: 176 c: 185
a: 153 b: 104 c: 185
a: 95 b: 168 c: 193
a: 195 b: 28 c: 197
a: 187 b: 84 c: 205
a: 133 b: 156 c: 205
a: 21 b: 220 c: 221
a: 171 b: 140 c: 221
a: 221 b: 60 c: 229
a: 105 b: 208 c: 233
a: 209 b: 120 c: 241
a: 255 b: 32 c: 257
a: 23 b: 264 c: 265
a: 247 b: 96 c: 265
a: 69 b: 260 c: 269
a: 115 b: 252 c: 277
a: 231 b: 160 c: 281
a: 161 b: 240 c: 289
a: 285 b: 68 c: 293
a: 207 b: 224 c: 305
a: 273 b: 136 c: 305
a: 25 b: 312 c: 313
a: 75 b: 308 c: 317
a: 253 b: 204 c: 325
a: 175 b: 288 c: 337
a: 225 b: 272 c: 353
a: 27 b: 364 c: 365
a: 135 b: 352 c: 377
a: 189 b: 340 c: 389
a: 29 b: 420 c: 421
a: 87 b: 416 c: 425
a: 145 b: 408 c: 433
a: 31 b: 480 c: 481
a: 93 b: 476 c: 485
Press any key to continue . . . |