题目链接.
整除分块.
题意:从
l
−
r
l-r
l−r中取
k
k
k个数,求这
k
k
k个数共有多少个不同的
g
c
d
gcd
gcd.
思路:暴力枚举
1
−
r
1-r
1−r,整除分块优化。
官方题解
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a,b,c;
int main()
{
ios::sync_with_stdio(0);
//cin.tie(0);cout.tie(0);
cin>>a>>b>>c;
a--;
ll l,r;
ll ans=0;
for(ll i=1;i<=b;i=r+1)
{
l=i;
//分块时a/i与b/i的左边界可能不同,所以要取较小的右边界。
if(i<=a)r=min(a/(a/i),b/(b/i));
else r=b/(b/i);//a/i(i>a)所以恒为0,只要考虑b/i的右边界。
if((b/i-a/i)>=c)ans+=r-l+1;
}
cout<<ans<<"\n";
return 0;
}