学到的内容
若a是b的倍数则gcd(a,b)=b
题解
设d=gcd(a,b)
a+b能整除b*d,则 a+b能够整除b
化为 则要满足条件,需要满足1.a是b的倍数,为k倍.2,k+1能整除d
a是b的倍数,则gcd(a,b)=b,式子变为
则枚举每个b,对于每个b,1~n有n/b个a是b的倍数, 倍数为1~n/b 则中分子的范围为2~n/b+1
对于b=1, 满足题意的a的个数为n
对于b!=1,每个b, 1~n/b+1中能使为整数的个数为 (n/b+1)/b 因为1不可能是b的倍数,则2~n/b+1中使式子为整数的个数也为 (n/b+1)/b
#include<iostream>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
int n,m;
cin>>n>>m;
long long ans=n;
for(int i=2;i<=m;i++){
int t=(n/i+1)/i;
ans+=t;
}
cout<<ans<<endl;
}
}