題目
鏈接: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);