题解 | #素数伴侣#
素数伴侣
https://www.nowcoder.com/practice/b9eae162e02f4f928eac37d7699b352e
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#include<string.h>
int num[100];
int nums[100];
int cp[100][100];
bool used[100];
int numlen=0;
int numslen=0;
int who[100];
bool isprime(int figure) {
int i;
for (i = 2; i * i <= figure; i++) {
if (figure % i == 0) {
return false;
}
}
return true;
}
int match(int i)//匈牙利算法
{
for(int j=0;j<numslen;j++)
{
if(cp[i][j]==1&&used[j]==0)
{
used[j]=1;
if(who[j]==-1||match(who[j]))
{
who[j]=i;
return 1;
}
}
}
return 0;
}
int main() {
int n;
scanf("%d\n",&n);
memset(num, 0, sizeof(num));
memset(nums, 0, sizeof(nums));
memset(who,-1,sizeof(who));
for(int i=0;i<n;i++)
{
int in;
scanf("%d",&in);
if(in%2==1) num[numlen++]=in;
else nums[numslen++]=in;
}
for(int i=0;i<numlen;i++)
{
for(int j=0;j<numslen;j++)
{
if(isprime(num[i]+nums[j])) cp[i][j]=1;
//else cp[i][j]=0;
}
}
int sum=0;
for(int i=0;i<numlen;i++)
{
memset(used, 0, sizeof(used));
sum=sum+match(i);
}
printf("%d",sum);
}
九号公司成长空间 1人发布