C. Floor and Mod codeforces-701-div2 思維 + 數學
阿新 • • 發佈:2021-02-14
技術標籤:CodeForces
input
9
3 4
2 100
4 3
50 3
12 4
69 420
12345 6789
123456 789
12345678 9
output
1
0
2
3
5
141
53384
160909
36
solution
假 設 x / y = x % y = a 假設x/y=x\%y=a 假設x/y=x%y=a
按
照
a
=
1
開
始
枚
舉
,
a
=
i
時
按照a=1開始列舉,a=i時
按照a=1開始枚舉,a=i時
最
小
的
符
合
次
情
況
的
點
對
為
(
i
∗
(
i
+
2
)
,
i
+
1
)
最小的符合次情況的點對為(i*(i+2),i+1)
最小的符合次情況的點對為(i∗(i+2),i+1)
因
此
符
合
的
點
對
為
(
i
∗
(
i
+
2
)
+
i
∗
t
,
i
+
1
+
t
)
,
t
∈
Z
+
,
r
e
s
+
=
t
詳
情
見
代
碼
因此符合的點對為(i*(i+2)+i*t,i+1+t),t∈Z_+,res+=t詳情見程式碼
因此符合的點對為(i∗(i+2)+i∗t,i+1+t),t∈Z+,res+=t詳情見代碼
code
//Siberian Squirrel
//#include<bits/stdc++.h>
//#include<unordered_map>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
//#define ACM_LOCAL
using namespace std;
typedef long long ll;
const double PI = acos(-1);
const double eps = 1e-7;
const int MOD = 3221225473;
const int N = 5e6 + 10;
const int UP = 1e4;
inline ll solve(int x, int y, ll res = 0) {
// res += min(x, y - 1);
for(int i = 1; ; ++ i) {
int temp = i * (i + 2), _temp = i + 1;
if(temp > x || _temp > y) break;
res += min((x - temp) / i + 1, y - i);
}
return res;
}
int main() {
#ifdef ACM_LOCAL
freopen("input", "r", stdin);
freopen("output", "w", stdout);
#endif
int o = 1, n, m, x, y;
scanf("%d", &o);
while(o --) {
scanf("%d%d", &x, &y);
printf("%lld\n", solve(x, y));
}
return 0;
}