ta có thể thấy giữ 2 khi bình lên sẽ có khoảng cách nhất định thì các số trong khoảng đó sẽ có gtri nguyên là min của 2 số đó
vậy ta chỉ cần tìm khoảng gia trị thì sẽ tìm được giá trị cần tìm
vậy ta sẽ từ b tìm khoảng giảm dần về sau và tìm số chinh phương gần nhất với b ở mỗi lần
vậy ở ta thấy ở mỗi lần b giảm xuống /sqrt(b) mỗi lần
nên dpt tổng quat chỉnh là O(/sqrt(b))
```cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6;
#define fr(i,j,x,n) for (int i = j; i <= n; i += x)
#define frn(i,j,x,n) for (int i = j; i >= n; i -= x)
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
ll a,b,n;
cin >> a >> b;
ll s = 0;
while (b >= a){
ll q = sqrt(b);
n = q;
q *= q;
if (q < a) q = a;
s += n*(b - q + 1);
b = q - 1;
}
cout << s;
return 0;
}
```