题目
链接:https://ac.nowcoder.com/acm/contest/3003/E
这一天,牛牛与 牛魔王相遇了――然而这并不在 牛牛期望之中。
牛魔王不出意料又给 牛牛一道看似很难的题目:求有多少个不同的正整数三元组 (i,j,k) 满足
sqrt(i)+sqrt (j)=sqrt (k)
,且 i×j≤n。
牛牛并不会做,你能略施援手吗?
不相等的ij互换位置相当于一个新的答案;
样例
输入:1
输出:1
(1,1,4)
拿到式子,想到ij<=n,那么就两边平方:
i + j +2sqrt(ij)=k;
也就是说,sqrt(ij)为整数,也即是ij等于mm,(mm<=n)
那么我们就可以知道了,只要i乘j结果是某方,ij就是可以的,举例子ij分别为2,8,ij=16,为4^2,所以满足条件,我们只需要枚举m,然后求m*m的因子数,有多少个因子就有多少个ij组合:
代码比较短:
scanf("%d",&n);
int ans=0;
for(int time=1;time*time<=n;time++)
{
int yinzi=0;
for(int time1=1;time1<=time;time1++)
{
if((time*time)%time1==0)
{
if(time1!=time)yinzi+=2;
else yinzi++;
}
}
ans+=yinzi;
//printf("%d %d %d\n",time,yinzi,ans);
}
printf("%d\n",ans);