首页 > 其他 > 详细

【补题】Codeforces Round #701 (Div. 2) C. Floor and Mod

时间:2021-02-15 09:38:13      阅读:108      评论:0      收藏:0      [点我收藏+]

题目链接:https://codeforces.com/contest/1485/problem/C

题解:

\(a/b=a\) \(mod\) \(b\) 等价于\(a\)可以表示成\(a=bk+k(k<b)\)的形式。易得k同时需满足\(k<\sqrt{a}\)。于是我们只需要计算k在\([1,\sqrt{a}]\)范围内满足条件的不b的个数。
对于给定的k,当b的值不做限定时,b可取的最小值为\(b=k+1\),最大值为\(b=\frac{(a-k)}{k}\)。实际上b的最大值为y。因此可以求出b的取值个数n与k的关系为n=max(0,min(b,(a-k)/k)-(k+1)+1)。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

void solve(){
    ll a,b,sum=0;
    cin>>a>>b;
    for(int k=1;k<sqrt(a);k++)sum+=max(0ll,min(b,(a-k)/k)-(k+1)+1);
    cout<<sum<<endl;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)solve();
    return 0;
}

【补题】Codeforces Round #701 (Div. 2) C. Floor and Mod

原文:https://www.cnblogs.com/ambrumf/p/14401589.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!