平方数,给你一个整数集合A(无重复元素),如果x,y都属于A,且y=x*x,那么组成一个数对,请找出这个集合中满足条件的数对的个数。比如说集合A={2,3,4},则只有4=2*2,则答案为1。

Description
描述
给你一个整数集合A(无重复元素),如果x,y都属于A,且y=xx,那么组成一个数对,请找出这个集合中满足条件的数对的个数。比如说集合A={2,3,4},则只有4=22,则答案为1。

输入
每个样例占2行,第一行为一个非负整数n,n<=1000,为集合中元素的个数,如果n为0则输入结束。第二行为n个整数,为集合的元素,所有的元素为非负整数,且<=100,000,000,两个整数之间有一个空格隔开。

输出
每行输出一个样例的结果。

Sample Input
3
2 3 4
5
3 36 5 9 6
0

Sample Output
1
2

#include <stdio.h>
int main()
{
    int i,j,k,s,n,A[1001],x,y;
    while(scanf("%d",&n))
    {
        s = 0;
        if(n == 0)
        {
            break;
        }
        for(i = 0;i < n;i++)
        {
            scanf("%d",&A[i]);
            if(A[i]==1)
            {
                s-=1;
            }
        }
        for(j = 0;j < i;j++)
        {
            x = A[j];

            for(k = 0;k < i;k++)
            {
                 y = A[k];
                 if(y == x * x)
               {
                 s++;
               }
            }
        }
        printf("%d\n",s);
    }
    return 0;
}

结果为Wrong Answer,哪里错了呢?

集合的元素,所有的元素为非负整数,且<=100,000,000, x*x的平方数超int范围了, 所以A[1001] ,x,y;类型应改为:long long int A[1001],x,y;