題目在這裏呀!
題解
一道會杜教篩或者分塊的人都應該會寫的題啦。
首先考慮簡單簡單版:
這個問題我們直接對
那麼很好轉換到這個問題,
所以就是上面那個問題啦w(數學公式寫得有點懵qwq)
//Suplex
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int n,k,next;
long long ans;
int main()
{
scanf("%d%d",&n,&k);
if(n>k){ans=(long long)(n-k)*k;n=k;}
ans+=(long long)n*k;
for(int i=1;i<=n;i=next+1){
int now=k/i;
next=k/now;
if(next>n) next=n;
ans=ans-((long long)now*(long long)(i+next)* (long long)(next-i+1)/2);
}
printf("%lld\n",ans);
return 0;
}