F. Count Prime Pairs

单点时限: 2.0 sec

内存限制: 512 MB

对于数组a,如果ij并且ai+aj是一个质数,那么我们就称(i,j)为质数对,计算数组中质数对的个数。

输入格式

第一行输入一个n,表示数组的长度,接下来n个整数,第i个数代表ai
(1n100000,0ai100)

输出格式

输出数组中质数对的个数。

样例

input
3
1 2 3
output
4

提示

样例说明:a1+a2,a2+a1,a2+a3,a3+a2都为质数,总共有四对。

 
#include<iostream>
#include<map>
#include<set>
using namespace std;
const int N=1e5 + 10;
map<int ,int>mp;
set<int>se;
set<int >::iterator it;
int arr[N];
int a[N];
int prime[210]={1,1,0};
int pow(){
    for(int i=0;i*i<=200;i++)
        if(prime[i]==0){
            for(int j=i+i;j<=200;j+=i)
                prime[j]=1;
        }
}
int main(){
    pow();
    int n;
    cin>>n;
    int x;
    for(int i=0;i<n;i++){
        cin>>x;
        mp[x]++;//key为值,value为该数出现的次数
        se.insert(x);
    }
    int pos=0;
    for(it=se.begin();it!=se.end();it++){
        a[pos++]=*it;
    }
    int sum=0;
    for(int i=0;i<pos;i++){
        for(int j=0;j<pos;j++){//当i==j时,他们指的同一个数,即一个数字出现了多次,,可以推得他们的组成的总个数为n*(n-1)否则就是n*n;

if(!prime[a[i]+a[j]])
            {
                if(i==j){
                    sum+=mp[a[i]]*(mp[a[i]]-1);
                
                }
                else sum+=mp[a[i]]*mp[a[j]];
            }
        }
    }
    cout<<sum<<endl; 
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Accepting/p/11285536.html
今日推荐