#define_crt_secure_no_warnings#include<iostream>#include<vector>#include<string>#include<stdio.h>#include<stdlib.h>using namespacestd;Const intN =101;BOOLIssushu (intN) { if(n%2==0|| N%3==0)return false; Else{ for(inti =5; I*i <= N; i + =6) if(n%i = =0|| n% (i +2) ==0)return false; return true; }}intN1, n2, ans;intResult[n];BOOLState[n];BOOLMap[n][n];BOOLFindintx) { for(inti =1; I <= N2; ++i) { if(Map[x][i] &&!State[i]) {State[i]=true; if(Result[i] = =0||find (Result[i])) {Result[i]=x; return true; } } } return false;}intHungary () { for(inti =1; I <= N1; ++i) {memset (state,0,sizeof(state)); if(Find (i)) + +ans; } returnans;}classxx{string&name;};intMain () {intN, Val; Vector<int>odd, even; scanf ("%d", &N); for(inti =0; I < n; ++i) {scanf ("%d", &val); if(val%2==0) Even.push_back (Val); ElseOdd.push_back (Val); } memset (Map,0,sizeof(map)); for(inti =0; I < odd.size (); ++i) { for(intj =0; J < Even.size (); ++j) { if(Issushu (Odd[i] + even[j])) Map[i +1][j +1] =true; }} memset (result,0,sizeof(result)); N1= Odd.size (); N2 = Even.size (); Ans =0; cout<< Hungary () <<Endl;}
Hungarian Algorithm (Prime Companion (HW1112))