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

ตรวจสอบว่าหมายเลขที่ระบุเป็นหมายเลข Ore หรือไม่ใน Python


สมมติว่าเรามีตัวเลข n เราต้องตรวจสอบว่า n เป็นจำนวนแร่หรือไม่ ดังที่เราทราบจำนวนแร่เป็นตัวเลขที่ตัวหารมีค่าฮาร์มอนิกเป็นจำนวนเต็ม

ดังนั้น หากอินพุตเท่ากับ 28 ผลลัพธ์จะเป็น True เนื่องจากมีตัวหารหกตัวของ 28:[1, 2, 4, 7, 14, 28] ดังนั้น

ตรวจสอบว่าหมายเลขที่ระบุเป็นหมายเลข Ore หรือไม่ใน Python

เนื่องจาก 3 เป็นจำนวนเต็ม ดังนั้น 28 เป็นจำนวนแร่

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน get_all_div() นี่จะใช้เวลา n
  • div :=รายการใหม่
  • สำหรับฉันในช่วง 1 ถึงส่วนของจำนวนเต็มของ (รากที่สองของ n) ทำ
    • ถ้า n หารด้วย i ลงตัว
      • ถ้าผลหารของ (n / i) คือ i แล้ว
        • ใส่ i ต่อท้าย div
      • มิฉะนั้น
        • ใส่ i ต่อท้าย div
        • แทรกผลหารของ (n / i) ที่ส่วนท้ายของ div
  • ผลตอบแทน 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