题意
题解
傻逼题。
∑i=1nm mod i=∑i=1nm−i×⌊mi⌋=nm−∑i=1ni×⌊mi⌋
直接分块。 O(n√)
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
LL n,m,ans;
int main(){
scanf("%lld%lld",&m,&n);
for(LL i=1,nxt;i<=min(m,n);i=nxt+1){
nxt=n/(n/i); nxt=min(nxt,min(n,m));
ans+=(i+nxt)*(nxt-i+1)/2*(n/i);
}
ans=n*m-ans;
printf("%lld\n",ans);
return 0;
}
本文解析了一道算法题目,通过分块的方法实现了O(n√)的时间复杂度。文章给出了具体的数学推导过程及C++代码实现。
6118

被折叠的 条评论
为什么被折叠?



