完全平方数
小杨同学有⼀个包含n个非负整数的序列A,他想要知道其中有多少对下标组合<i, j>(1≤i, j≤n, i<j ),使得Ai+Aj是完全平方数。如果x是完全平方数,则存在非负整数y使得y*y=x 。
【输入格式】
第⼀行⼀个非负整数n,表示非负整数个数。
第二行包含 n个非负整数A₁,A₂,...Aₙ,表示序列A包含的非负整数。
对于全部数据,保证有1≤n≤1000, 0≤Aᵢ≤100000 。
【输出格式】
输出⼀个非负整数,表示和是完全平方数的非负整数对数。
【输入样例】
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 + 1e-7);
if (t * t == m)
ans++;
}
}
cout << ans << "\n";
}