题目:点这里
要求:给出一组数,求满足
的i,j,k有多少个
分析:列举ak,对每一个找出满足题意的i,j然后计算有多少个(三个数可以相同,找i,j的范围是0~sqrt(ak);
下面还是队友代码时间:
#include<bits/stdc++.h>
using namespace std;
int x[1000005];
int p[1000005];
int main(){
int n;
cin>>n;
long long ans=0;
map<int,int> mp;
for(int i=0;i<n;i++){
scanf("%d",&x[i]);
p[x[i]]++;//记录这个数值是否出现过
}for(int i=0;i<n;i++){
for(int j=1;j<=sqrt(x[i]);j++){
if(x[i]%j==0&&p[j]!=0){//存在因子,且出现过
if(j*j!=x[i]){
ans+=2*p[x[i]/j]*p[j];//i,j不等,可以换位置
}else ans+=p[j]*p[j];//当i=j时,C(j出现次数,1)*C(x[i] / j出现次数,1)*2
}
}
}cout<<ans<<"\n";
}