Arithmetic Progressions

C++

#include <iostream>
#include <vector>
#include <chrono>
#include <math.h>
#include <fstream>
#include <algorithm>
using namespace std;

bool diffTest(int numElements)
{
    std::vector<int> ele(numElements);
    for (int i = 0; i < numElements; ++i)
        ele[i] = i * i;

    std::vector<std::vector<int>> diff(numElements);
    for (int i = 0; i < numElements; ++i)
    {
        diff[i].resize(numElements);
        for (int j = 0; j < numElements; ++j)
            diff[i][j] = ele[i] - ele[j];
    }
    return true;
}

bool myfunction (vector<int> i,vector<int> j) { 
    if (i[1] < j[1]) 
        return true;
    else
    if (i[1] == j[1])
        return (i[0] < j[0]);
    return false;
}

void solvePuzzle(int largestNumber, int seqLength, vector<vector<int>>& ansList)
{
    // generate bi-squares
    int numBisquares = (largestNumber + 2) * (largestNumber + 1) / 2;
    int maxBisquare = largestNumber * largestNumber * 2;
    vector<bool> LUT(maxBisquare + 1, false);
    int cnt = 0;
    for (int i = 0; i <= largestNumber; i++)
    {
        for (int j = i; j <= largestNumber; j++)
        {
            int bisquare = i * i + j * j;
            //bisquares[cnt] = bisquare;
            LUT[bisquare] = true;
            cnt++;
        }
    }

    //sort(bisquares.begin(),bisquares.end());

    // iterate bi-squares
    for (int i = 0; i < LUT.size(); i++)
    {
        if (LUT[i] == true)
        {
            int bis = i;
            int maxDiff = ceil((maxBisquare - bis) / (seqLength - 1));
            for (int diff = 1; diff <= maxDiff; diff++)
            {
                bool seqFound = true;
                for (int j = 1; j < seqLength; j++)
                {
                    if (!LUT[bis + j * diff]) 
                    {
                        seqFound = false;
                        break;
                    }
                }

                if (seqFound)
                {
                    vector<int> ans(2);
                    ans[0] = bis; ans[1] = diff;
                    ansList.push_back(ans);
                }
            }
        }
    }
    sort(ansList.begin(),ansList.end(),myfunction);
}


int main()
{
    ifstream fIn ("ariprog.in");
    int largestNumber, seqLength;
    fIn >> seqLength >> largestNumber;
    fIn.close();
    vector<vector<int>> ansList;
    solvePuzzle(largestNumber, seqLength, ansList);
    ofstream fOut ("ariprog.out");

    if (ansList.size() == 0){
        fOut << "NONE" << std::endl;
    }
    else{
        for (auto ans: ansList)
        {
            fOut << ans[0] << " " << ans[1] << std::endl;
        }
    }
    fOut.close();
    return 0;
}