สมมติว่าเรามีสองอาร์เรย์ อันหนึ่งเป็น num และอีกอันเป็นจำนวนเฉพาะ เราต้องตรวจสอบว่าเป็นไปได้หรือไม่ที่จะทำให้องค์ประกอบทั้งหมดของ nums เท่ากันโดยการคูณจำนวนเฉพาะตั้งแต่หนึ่งจำนวนขึ้นไปจากอาร์เรย์ของจำนวนเฉพาะ
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[25, 100] จำนวนเฉพาะ =[2, 5] ผลลัพธ์จะเป็น True เนื่องจากเราสามารถคูณ 25 ด้วย 2 สองครั้งเพื่อให้ได้ 100 องค์ประกอบทั้งหมดจะเหมือนกัน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- lcm_arr :=LCM ขององค์ประกอบทั้งหมดเป็น nums
- สำหรับฉันในช่วง 0 ถึงขนาดของ nums - 1 ทำ
- val :=lcm_arr/nums[i]
- ถ้าขนาดของจำนวนเฉพาะไม่ใช่ 0 และ val ไม่ใช่ 1 ดังนั้น
- ในขณะที่ val mod primes[0] เป็น 0, do
- val :=val/primes[j]
- ในขณะที่ val mod primes[0] เป็น 0, do
- ถ้า val ไม่เหมือนกับ 1 แล้ว
- คืนค่าเท็จ
- คืนค่า True
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
from math import gcd def array_lcm(nums): ans = nums[0] for i in range(1,len(nums)): ans = (nums[i]*ans)/gcd(nums[i], ans) return ans def solve(nums, primes): lcm_arr = array_lcm(nums) for i in range(len(nums)): val = lcm_arr/nums[i] for j in range(len(primes) and val != 1): while (val % primes[j] == 0): val = val/primes[j] if (val != 1): return False return True nums = [25, 100] primes = [2, 5] print(solve(nums, primes))
อินพุต
[25, 100], [2, 5]
ผลลัพธ์
True