สมมติว่าเรามีตัวเลข n เราต้องตรวจสอบว่า n เป็นจำนวนแร่หรือไม่ ดังที่เราทราบจำนวนแร่เป็นตัวเลขที่ตัวหารมีค่าฮาร์มอนิกเป็นจำนวนเต็ม
ดังนั้น หากอินพุตเท่ากับ 28 ผลลัพธ์จะเป็น True เนื่องจากมีตัวหารหกตัวของ 28:[1, 2, 4, 7, 14, 28] ดังนั้น
เนื่องจาก 3 เป็นจำนวนเต็ม ดังนั้น 28 เป็นจำนวนแร่
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน get_all_div() นี่จะใช้เวลา n
- div :=รายการใหม่
- สำหรับฉันในช่วง 1 ถึงส่วนของจำนวนเต็มของ (รากที่สองของ n) ทำ
- ถ้า n หารด้วย i ลงตัว
- ถ้าผลหารของ (n / i) คือ i แล้ว
- ใส่ i ต่อท้าย div
- มิฉะนั้น
- ใส่ i ต่อท้าย div
- แทรกผลหารของ (n / i) ที่ส่วนท้ายของ div
- ถ้าผลหารของ (n / i) คือ i แล้ว
- ถ้า n หารด้วย i ลงตัว
- ผลตอบแทน div
- กำหนดฟังก์ชัน get_harmonic_mean() นี่จะใช้เวลา n
- div :=get_all_div(n)
- รวม :=0
- ความยาว :=ขนาดของ div
- สำหรับฉันในช่วง 0 ถึงความยาว - 1 ทำ
- ผลรวม :=รวม + (n / div[i])
- รวม :=รวม / n
- ความยาวคืน / รวม
- จากวิธีหลัก ให้ทำดังนี้:
- mean :=get_harmonic_mean(n)
- ถ้าค่ากลางเป็นจำนวนเต็มแล้ว
- คืนค่า True
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
โค้ดตัวอย่าง
def get_all_div(n): div = [] for i in range(1, int(n**(0.5)) + 1): if n % i == 0: if n // i == i: div.append(i) else: div.append(i) div.append(n // i) return div def get_harmonic_mean(n): div = get_all_div(n) total = 0 length = len(div) for i in range(0, length): total += (n / div[i]) total /= n return length / total def solve(n): mean = get_harmonic_mean(n) if mean - int(mean) == 0: return True return False n = 28 print(solve(n))
อินพุต
28
ผลลัพธ์
True