4611: 【GESP2403三级】完全平方数

内存限制:64 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:15 解决:7

题目描述

⼩杨同学有⼀个包含$n$ 个非负整数的序列$A$ ,他想要知道其中有多少对下标组合$< i,j >$ ($1\le i,j\le n,i < j$ ),使得$A_i+A_j$是完全平方数。
如果$x$ 是完全平方数,则存在非负整数$y$ 使得 $y×y=x$。

输入

第一行一个非负整数$n$ ,表示非负整数个数。
第二行包含$n$ 个非负整数$A_1,A_2,...,A_n$ ,表示序列$A$ 包含的非负整数。

输出

输出一个非负整数,表示和是完全平方数的非负整数对数。

样例输入 复制

5
1 4 3 3 5

样例输出 复制

3

提示

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int a[N]; 
int main(){
    int n;
    cin >> n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            int m = a[i] + a[j];
            int t = sqrt(m);
            if(t * t == m)
                ans++;
        }
    }
    cout<<ans<<"\n";
}