3150: 哈哈哈,我们三个的友谊坚不可摧
题目描述
给定一个长度为 n 的序列 a,我们定义友谊组为满足条件 (ai,aj,ak),其中 1 <= i < j < k <= n,且 ai,aj,ak 均为质数的组合。现在需要计算序列中存在多少个不同的友谊组。
友谊组的唯一性取决于它们的下标各不相同。质数是指大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数。输入
第一行一个整数 n (1<= n <= 1e5),表示序列 a 长度为 n。
第二行 n 个整数,表示序列 ai (1 <= ai <= 5e5)。输出
输出一个整数表示有多少友谊组。
样例输入 Copy
8 2 3 7 9 10 4 1 5样例输出 Copy
4提示
(2,3,7),(2,3,5),(2,7,5),(3,7,5) 有且仅有这4组。
#include <iostream>
#include<cstring>
#include "string"
#include <iomanip>
#include<math.h>
#include<algorithm>
using namespace std;
int zhishu(int t)
{
if(t==1)return 0;
if(t==2)return 1;
int flag=0;
for(int i=2;i<=sqrt(t);i++)
{
if(t%i==0)
{
flag=1;
return 0;
}
}
if(flag==0)return 1;
}
int main() {
int n;
cin>>n;
long long int a[101000];
int count=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(zhishu(a[i])==1){
count++;
}
}
int num=count-2;
long long int p=0;
for(int i=1;i<=count;i++)
{
if(num!=0)
{
p+=(long long int)num*i;
num--;
}
else break;
}
cout<<p;
return 0;
}