题解 CF1202F 【You Are Given Some Letters...】
Σ( ° △ °|||)︴啊嘞,为什么这么好一道题没人做啊。
下文中用
我们考虑对于一个合法的
看上去有了这个之后我们就可以直接数了?我们考虑一定需要的是
但同时也要注意,还有一个条件,就是我们的
美化一下就是
那么我们就可以通过从1到n枚举
然后这东西显然是可以数论分块的,所以我们分一下块就做完了:
#define LL long long
#define Mod 1000000007
using namespace std ;
int N, M, L ; LL Ans ;
int main(){
cin >> N >> M, L = N + M ;
for (int g, l = 1, r ; l <= L ; l = r + 1){
g = L / l, r = L / g ;
if (N < g || M < g) continue ;
int ln = (N + g) / (g + 1), hn = N / g ;
int lm = (M + g) / (g + 1), hm = M / g ;
if (hn >= ln && hm >= lm)
Ans += max(0ll, 1ll * (min(hn + hm, r) - max(l, lm + ln) + 1)) ;
}
cout << Ans << endl ; return 0 ;
}