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$。
如果$x$ 是完全平方数,则存在非负整数$y$ 使得 $y×y=x$。
输入
第一行一个非负整数$n$ ,表示非负整数个数。
第二行包含$n$ 个非负整数$A_1,A_2,...,A_n$ ,表示序列$A$ 包含的非负整数。
第二行包含$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";
}