華為OJ之素數伴侶 匈牙利演算法

2021-08-03 20:49:28 字數 1301 閱讀 9689

題目描述

若兩個正整數的和為素數,則這兩個正整數稱之為「素數伴侶」,如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個整數

輸出描述:

求得的「最佳方案」組成「素數伴侶」的對數。
輸入例子:

4

2 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大,但不是素數則稱之為合數。匈牙利演算法 增廣路徑的理解 理解一 在二分圖的匹配中,如果一條路徑的首尾是非匹配點,...