Pagini recente » Cod sursa (job #3273318) | Cod sursa (job #2714978) | Cod sursa (job #1136613) | Cod sursa (job #3123398) | Cod sursa (job #2733589)
#include <bits/stdc++.h>
using namespace std;
int t,n,r;
int verif (long long val){
long long nr = sqrt(val);
if (sqrt(val) == nr)
return 1;
nr++;
if (nr*(nr-1)+1 <= val && val <= nr*nr)
return 1;
return 0;
}
int main (){
ifstream cin ("progresie.in");
ofstream cout ("progresie.out");
cin>>t;
for (;t--;){
cin>>n>>r;
for (long long i=1;;i++){
long long start = i * (i-1) + 1;
long long nr = i-1;
int ok = 1;
for (int j=1;j<n;j++){
long long poz = start + r * j;
long long block = sqrt(poz-1) + 1; /// in blocul asta ar trebui sa se afle
long long start_block = block * (block - 1) + 1;
long long end_block = block * block;
if (poz < start_block){ /// trb sa deplasez la dreapta
start += start_block - poz;
nr -= start_block - poz;
} else {
nr = min (nr,end_block - poz);
}
if (poz + nr < start_block){
/// inseamna ca nici acum nu am reusit sa il aduc in bloc
ok = 0;
break;
}
}
if (ok){
cout<<start<<"\n";
break;
}
}
}
return 0;
}