สมมติว่าเรามีตัวเลขอาร์เรย์ เราต้องตรวจสอบว่าผลรวมขององค์ประกอบเฉพาะทั้งหมดในอาร์เรย์ที่กำหนดนั้นเป็นจำนวนเฉพาะหรือไม่
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[1,2,4,5,3,3] ผลลัพธ์จะเป็น True เนื่องจากผลรวมของจำนวนเฉพาะทั้งหมด (2+5+3+3) =13 และ 13 ก็เช่นกัน ไพร์ม.
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- MAX :=10000
- ตะแกรง :=รายการขนาด MAX และเติมจริง
- กำหนดฟังก์ชัน generate_list_of_primes()
- ตะแกรง[0] :=เท็จ ตะแกรง[1] :=เท็จ
- สำหรับ i ในช่วง 2 ถึง MAX - 1 ทำ
- ถ้าตะแกรง[i] เป็นจริง แล้ว
- สำหรับ j ในช่วง 2^i ถึง MAX เพิ่มขึ้น i
- ตะแกรง[j] :=เท็จ
- สำหรับ j ในช่วง 2^i ถึง MAX เพิ่มขึ้น i
- ถ้าตะแกรง[i] เป็นจริง แล้ว
- จากวิธีหลัก ให้ทำดังนี้:
- generate_list_of_primes()
- รวม :=0
- สำหรับฉันในช่วง 0 ถึงขนาดของ arr - 1 ทำ
- ถ้าตะแกรง[arr[i]] เป็นจริง แล้ว
- รวม :=รวม + arr[i]
- ถ้าตะแกรง[arr[i]] เป็นจริง แล้ว
- ถ้าตะแกรง[รวม]เป็นจริงแล้ว
- คืนค่า True
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
โค้ดตัวอย่าง
MAX = 10000 sieve = [True] * MAX def generate_list_of_primes() : sieve[0] = False sieve[1] = False for i in range(2, MAX) : if sieve[i] : for j in range(2**i, MAX, i) : sieve[j] = False def solve(arr) : generate_list_of_primes() total = 0 for i in range(len(arr)) : if sieve[arr[i]] : total += arr[i] if sieve[total] : return True return False nums = [1,2,4,5,3,3] print(solve(nums))
อินพุต
[1,2,4,5,3,3]
ผลลัพธ์
True