โจทย์: กำหนด Array nums ตรวจสอบว่าผลรวมของสมาชิกที่เป็น Prime ใน Array นั้น เองก็เป็น Prime อีกด้วยหรือไม่
ตัวอย่าง
nums = [1,2,4,5,3,3] → True (Primes: 2,5,3,3 → Sum=13 ซึ่งเป็น Prime)
อัลกอริทึม (Sieve of Eratosthenes)
- สร้าง Sieve ขนาด MAX (10000) หา Prime ทั้งหมด
- วน Array รวมค่าที่เป็น Prime
- ตรวจสอบว่าผลรวมเป็น Prime ด้วย Sieve เดียวกัน
โค้ดตัวอย่าง
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): # Fixed: 2*i not 2**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))
Input / Output
Input: [1,2,4,5,3,3] Output: True
หมายเหตุ: โค้ดต้นฉบับมี Bug ที่range(2**i, MAX, i)ควรเป็นrange(2*i, MAX, i)(เริ่มจาก 2*i ไม่ใช่ 2 ยกกำลัง i) โค้ดข้างบนแก้ไขแล้ว