这道题的如果直接枚举铁定超时,所以我们需要观察规律,首先把题目给的式子转换一下开平方,发现式子变成I+J+2根号IJ=K
所以因为k可以无限大只需保证根号IJ为整数并且IJ<N即可
那么我们只需枚举所有小于n的完全平方数的因子数每一个因子都相当与一组i与j可以换顺序把ans+2即可,在考虑完全平方数一定会有i=j的情况,把ans-1就是答案
代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int i,j,k,n,ans=0;
cin>>n;
for(int i=1;i*i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(i*i%j==0)
ans+=2;
}
ans-=1;//完全平方数一定会有i=j的情况
}
printf("%d\n",ans);
return 0;
}