題目描述
若兩個正整數的和為素數,則這兩個正整數稱之為「素數伴侶」,如2和5、6和13,它們能應用於通訊加密。現在密碼學會請你設計乙個程式,從已有的n(n為偶數)個正整數中挑選出若干對組成「素數伴侶」,挑選方案多種多樣,例如有4個正整數:2,5,6,13,如果將5和6分為一組中只能得到一組「素數伴侶」,而將2和5、6和13編組將得到兩組「素數伴侶」,能組成「素數伴侶」最多的方案稱為「最佳方案」,當然密碼學會希望你尋找出「最佳方案」。
輸入:有乙個正偶數n(n≤100),表示待挑選的自然數的個數。後面給出具體的數字,範圍為[2,30000]。
輸出:輸出乙個整數k,表示你求得的「最佳方案」組成「素數伴侶」的對數。
輸入描述:
輸入說明1 輸入乙個正偶數n
2 輸入n個整數
輸出描述:
求得的「最佳方案」組成「素數伴侶」的對數。輸入例子:
42 5 6 13
輸出例子:
2
分析:素數和一定是奇數和偶數相加的結果,先把輸入的數分成奇偶兩部分,然後再用匈牙利演算法
#include "stdio.h"#include "stdlib.h"
#include "string.h"
typedef int bool;
#define false 0
#define true 1
#define n 100
int edge[n][n],cx[n],cy[n];
//edge記錄兩點的關係,如果兩點相連,則edge【i】【j】為1
int visited[n];
//判斷該店是否被訪問過
int nx,ny,res;
bool isprime (int m,int n)
//判斷和是否為素數}}
return 0;
}int main()
,a1[100]=,a2[100]=;
nx=0,ny=0,res=0;
memset(cx,0xff,sizeof(cx));
//初始值為-1表示兩個集合中都沒有匹配的元素!
memset(cy,0xff,sizeof(cy));
memset(edge,0,sizeof(edge));
for(i=0;i
for(i=0;i
}for(i=0;i
} printf("%d\n",res); }}
華為oj之素數伴侶 匈牙利演算法
題目描述 若兩個正整數的和為素數,則這兩個正整數稱之為 素數伴侶 如2和5 6和13,它們能應用於通訊加密。現在密碼學會請你設計乙個程式,從已有的n n為偶數 個正整數中挑選出若干對組成 素數伴侶 挑選方案多種多樣,例如有4個正整數 2,5,6,13,如果將5和6分為一組中只能得到一組 素數伴侶 而...
華為OJ 素數伴侶
素數伴侶 題目描述 若兩個正整數的和為素數,則這兩個正整數稱之為 素數伴侶 如 2和5 6和13,它們能應用於通訊加密。現在密碼學會請你設計乙個程式,從已有的n n為偶數 個正整數中挑選出若干對組成 素數伴侶 挑選方案多種多樣,例如有 4個正整數 2,5,6,13,如果將5和 6分為一組中只能得到一...
素數伴侶 匈牙利演算法
對於0和1來說,它們既不是素數也不是合數。任何乙個大於1的正整數n,可以且唯一表示成有限個素數的乘積。素數 在乙個大於1的自然數中,除了1和此整數自身以外,不能被其他自然數整除的數。比1大,但不是素數則稱之為合數。匈牙利演算法 增廣路徑的理解 理解一 在二分圖的匹配中,如果一條路徑的首尾是非匹配點,...