题意:
给定一个n,求有多少对小于n的a,b满足lcm(a,b)/gcd(a,b) <= 3。
分析:
首先,lcm(a,b)=a*b/gcd(a,b),那么可以化简上面的式子为a*b<=3*gcd(a,b)*gcd(a,b),然后可以发现a和b是倍数关系,设b为a的k倍,则k*a*a<=3*a*a,解得k=3,所以最大公约数最大为3,
1. 当k=1时,a=b明显有n对(a,b)满足上面的式子。
2. 当k=2时,a最大为n/2,b最大才能满足小于n,满足要求的对数有n/2对。
3. 当k=3时,a最大为n/3,b才能满足,同理对数有n/3对。
由于a和b互换算两对,所以后两种情况要乘以2.
最后得出答案数学公式为n+2*(n/2+n/3)。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
cout<<n+2*(n/2+n/3)<<'\n';
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}