華為機試 最佳素數伴侶

2021-10-01 18:44:05 字數 2278 閱讀 4588

題目描述

題目描述

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

輸出描述:

求得的「最佳方案」組成「素數伴侶」的對數。

示例1輸入

42 5 6 13

輸出以下是本人的實現方法(執行時間超時,求大神優化演算法)。基本思想是採用遞迴的方法每次從列表中挑出兩個

import time

import math

num =

int(

input

("輸入數量:"))

string =

input

("輸入陣列:"

).split(

' ')

list_final =

list_input =

for i in string:

int(i)

)count =

0max_count=

0def

is_pram

(data)

:for i in

range(2

,int

(math.sqrt(data))+

1):if data % i ==0:

return

false

return

true

defparam_calculate

(list_data)

: total_param_count =

0for i in

range(0

,int

(len

(list_data)/2

)):sum

= list_data[i*2]

+list_data[i*2+

1]if is_pram(

sum)

==true

: total_param_count +=

1return total_param_count

defcirculate

(list_data)

:global count,max_count

total_param_count =

0 list_temp = list_data[:]

iflen

(list_data)

<=2:

0])1

])total_param_count = param_calculate(list_final)

if max_count < total_param_count:

max_count = total_param_count

list_final.pop(-1

) list_final.pop(-1

)return

0else

:for i in

range(1

,len

(list_temp)):

0]))

list_temp_2 = list_temp.copy(

) list_temp_2.pop(i)

list_temp_2.pop(0)

circulate(list_temp_2)

list_final.pop(-1

) list_final.pop(-1

)start=time.time(

)circulate(list_input)

print

("「最佳方案」組成「素數伴侶」的對數:"

,max_count)

end=time.time(

)print

("final is in %f ms"%(

(end-start)

*1000

))

華為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分為一組中只能得到一組 素數伴侶 而...

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

題目描述 若兩個正整數的和為素數,則這兩個正整數稱之為 素數伴侶 如2和5 6和13,它們能應用於通訊加密。現在密碼學會請你設計乙個程式,從已有的n n為偶數 個正整數中挑選出若干對組成 素數伴侶 挑選方案多種多樣,例如有4個正整數 2,5,6,13,如果將5和6分為一組中只能得到一組 素數伴侶 而...