Filename: prob49.cc
// Problem 49 // // The arithmetic sequence, 1487, 4817, 8147, in which each of the terms increases by 3330, is unusual in two ways: (i) each of the three terms are prime, and, (ii) each of the 4-digit numbers are permutations of one another. // // There are no arithmetic sequences made up of three 1-, 2-, or 3-digit primes, exhibiting this property, but there is one other 4-digit increasing sequence. // // What 12-digit number do you form by concatenating the three terms in this sequence? #include <iostream> #include <math.h> #include <sstream> #include <vector> #include <algorithm> #include <stdio.h> #define LB 1001 #define UB 10000 using namespace std; static bool isPrime(const unsigned int n) { if(n%2 == 0) return false; for(int i=3; i<=ceil(sqrt(n)); i+=2) { if(n%i == 0) { return false; } } return true; } static string toString(const unsigned int n) { stringstream out; out << n; return out.str(); } static unsigned int toInt(char c) { return c-48; } static vector<int> toVector(short a) { vector<int> v; string sa(toString(a)); for(string::const_iterator i = sa.begin(); i != sa.end(); ++i) { v.push_back(toInt(*i)); } sort(v.begin(), v.end()); return v; } static bool isPermute(short a, short b) { vector<int> va = toVector(a); vector<int> vb = toVector(b); return va == vb; } int main() { vector<int> primes; primes.push_back(2); for(int i=LB; i<UB; i+=2) { if(isPrime(i)) { primes.push_back(i); } } const vector<int> primes2 = primes; const vector<int> primes3 = primes; for(vector<int>::const_iterator i = primes.begin(); i!=primes.end(); ++i) { for(vector<int>::const_iterator j = primes2.begin(); j!=primes2.end(); ++j) { if(*i < *j && isPermute(*i, *j)) { int diff = *j-*i; if(*j+diff < 10000 && isPrime(*j+diff) && isPermute(*j, *j+diff)) { printf("%d %d %d\n", *i, *j, *j+diff); } } } } return 0; }
syntax highlighted by Code2HTML, v. 0.9.1
No comments:
Post a Comment