Pagini recente » Cod sursa (job #2308709) | Cod sursa (job #1712087) | Cod sursa (job #2085303) | Cod sursa (job #2961340) | Cod sursa (job #1057754)
# include <cstdio>
# include <cmath>
# include <cassert>
const char *FIN = "progresie.in", *FOU = "progresie.out";
int N, R, T;
inline bool isint(double val) {
return val == static_cast <int> (val);
}
inline int cauta(int x) {
int delta = 1 + 8*x;
double rad = sqrt(delta);
double n1 = (-1 - rad) * 0.5, n2 = (-1 + rad) * 0.5;
return static_cast <int> (n2);
}
inline bool is(int val) {
int n = cauta((val - 1) >> 1) + 1;
int first_elem = n * (n - 1) + 1;
return val < n + first_elem;
}
inline bool check (int val) {
val += R;
for (int i = 1; i < N; ++i, val += R) {
if (!is(val)) return 0;
}
return 1;
}
inline int minim(int a, int b) {
for (int i = a; i < b; ++i)
if (check (i)) return i;
return b;
}
inline int solve() {
int sol = -1;
for (int mij = 1; mij <= 15000; ++mij) {
//for (int st = 1, dr = 15000; st <= dr; ) {
//int mij = st + (dr - st) / 2;
//printf ("%d\n", mij);
if (check (mij * (mij - 1) + 1)) return mij * (mij - 1) + 1;
//else if (check (mij * (mij - 1) + mij)) minim(mij * (mij - 1) + 2, mij * (mij - 1) + mij);
}
assert(false);
}
int main (void) {
freopen (FIN, "r", stdin);
freopen (FOU, "w", stdout);
for (scanf ("%d", &T); T; --T) {
scanf ("%d %d", &N, &R);
printf ("%d\n", solve());
}
}