Pagini recente » Cod sursa (job #885544) | Cod sursa (job #229728) | Cod sursa (job #1489183) | Cod sursa (job #2974964) | Cod sursa (job #1344482)
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <set>
#include <vector>
#include <algorithm>
#include <limits>
using namespace std;
typedef int ull;
ull find_smallest_larger(ull n, vector<ull> & squares) {
int index = 0;
while (n > squares[index]) {
index++;
}
return squares[index];
}
int main(int argc, char * argv[]) {
FILE * i = fopen("progresie.in", "r");
FILE * o = fopen("progresie.out", "w");
int T, N, R;
fscanf(i, "%d\n", &T);
while (T--) {
fscanf(i, "%d %d\n", &N, &R);
ull i = 1;
ull count = 0;
ull f_num = 1;
ull cur = f_num;
ull start = i * i - i + 1;
ull end = i * i;
ull next_i = i + 1;
ull next_start = next_i * next_i - next_i + 1;
ull next_end = next_i * next_i;
while (true) {
if (cur >= start && cur <= end) {
count++;
cur += R;
if (count >= N) {
fprintf(o, "%d\n", f_num);
break;
}
}
else if ((cur > end && cur < next_start) || cur < start) { //bad sequence
if (f_num >= end) {
f_num = next_start;
i = i + 1;
cur = f_num;
}
else {
f_num++;
cur = f_num;
}
count = 0;
start = i * i - i + 1;
end = i * i;
next_i = i + 1;
next_start = next_i * next_i - next_i + 1;
next_end = next_i * next_i;
}
else {
cur += R;
i = (int)sqrt(cur);
start = i * i - i + 1;
end = i * i;
next_i = i + 1;
next_start = next_i * next_i - next_i + 1;
next_end = next_i * next_i;
}
}
}
return 0;
}