Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าผลรวมขององค์ประกอบเฉพาะของอาร์เรย์เป็นจำนวนเฉพาะหรือไม่ใน Python


สมมติว่าเรามีตัวเลขอาร์เรย์ เราต้องตรวจสอบว่าผลรวมขององค์ประกอบเฉพาะทั้งหมดในอาร์เรย์ที่กำหนดนั้นเป็นจำนวนเฉพาะหรือไม่

ดังนั้น หากอินพุตมีค่าเท่ากับ 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] :=เท็จ
  • จากวิธีหลัก ให้ทำดังนี้:
  • generate_list_of_primes()
  • รวม :=0
  • สำหรับฉันในช่วง 0 ถึงขนาดของ arr - 1 ทำ
    • ถ้าตะแกรง[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