Pagini recente » Cod sursa (job #1269691) | Cod sursa (job #1462527) | Cod sursa (job #511617) | Cod sursa (job #231952) | Cod sursa (job #1609294)
#include <iostream>
#include <fstream>
#include <vector>
#include <math.h>
using namespace std;
ifstream in("progresie.in");
ofstream out("progresie.out");
bool inSequence(int x)
{
// K(K - 1)+1 <= x <= K^2
int root = (int)(sqrt(x));
if (root*root == x)
return true;
if (x >= root*(root+1) + 1)
return true;
else
return false;
}
bool isFirstNumber(int x, int R, int N)
{
for (int i = 0; i < N; i++)
{
if (!inSequence(x + i*R))
return false;
}
return true;
}
int findLesserNumber(int blockfirst, int R, int N)
{
int x = blockfirst - R;
int lesserNumber = blockfirst;
while (x > 0 && inSequence(x))
{
lesserNumber = x;
x = x - R;
}
if (isFirstNumber(lesserNumber, R, N))
return lesserNumber;
else
return 0;
}
int main()
{
int T;
in >> T;
for (int i = 0; i < T; i++)
{
int N, R;
in >> N >> R;
int M = (N - 1) * R + 1;
int supLim = M*(M-1) + 1;
bool foundLesser = false;
for (int j = 1; j < M; j++)
{
int res = findLesserNumber(M*(M-1)+1, R, N);
if (res != 0)
{
foundLesser = true;
out << res << "\n";
break;
}
}
if (!foundLesser)
out << supLim << "\n";
}
return 0;
}