គណនា និងទទួលបានភាគចែកទូទៅធំបំផុត និងផលគុណធម្មតាតិចបំផុតនៅក្នុង Python

អាជីវកម្ម

ខាង​ក្រោម​នេះ​គឺ​ជា​ការ​រៀប​រាប់​អំពី​របៀប​គណនា និង​ទទួល​បាន​ភាគ​ចែក​ទូទៅ​បំផុត និង​ផល​គុណ​សាមញ្ញ​តិច​បំផុត​នៅ​ក្នុង Python។

  • ចែក​ចែក​ទូទៅ​បំផុត និង​ផលគុណ​រួម​តិច​បំផុត​នៃ​ចំនួន​គត់​ពីរ
  • ចែក​ចែក​ទូទៅ​បំផុត និង​ផល​គុណ​រួម​តិច​បំផុត​នៃ​ចំនួន​គត់​បី​ឬ​ច្រើន។

ចំណាំថាលក្ខណៈជាក់លាក់នៃមុខងារដែលបានផ្តល់នៅក្នុងបណ្ណាល័យស្តង់ដារខុសគ្នាអាស្រ័យលើកំណែ Python ។ ការអនុវត្តឧទាហរណ៍នៃមុខងារដែលមិនមាននៅក្នុងបណ្ណាល័យស្តង់ដារក៏ត្រូវបានបង្ហាញនៅក្នុងអត្ថបទនេះផងដែរ។

  • Python 3.4 ឬមុននេះ។
    • GCD:fractions.gcd()(មាន​អំណះអំណាង​តែ​ពីរ)
  • Python 3.5 ឬក្រោយ
    • GCD:math.gcd()(មាន​អំណះអំណាង​តែ​ពីរ)
  • Python 3.9 ឬក្រោយ
    • GCD:math.gcd()(គាំទ្រអាគុយម៉ង់ច្រើនជាងបី)
    • ភាគបែងសាមញ្ញតិចបំផុត។:math.lcm()(គាំទ្រអាគុយម៉ង់ច្រើនជាងបី)

នៅទីនេះយើងពន្យល់ពីវិធីសាស្រ្តដោយប្រើបណ្ណាល័យ Python ស្តង់ដារ។ NumPy អាច​ត្រូវ​បាន​ប្រើ​យ៉ាង​ងាយ​ស្រួល​ក្នុង​ការ​គណនា​ភាគ​ចែក​ទូទៅ​បំផុត​និង​ផលគុណ​សាមញ្ញ​តិច​បំផុត​សម្រាប់​ធាតុ​នីមួយៗ​នៃ​អារេ​ច្រើន។

ចែក​ចែក​ទូទៅ​បំផុត និង​ផលគុណ​រួម​តិច​បំផុត​នៃ​ចំនួន​គត់​ពីរ

GCD

ចាប់តាំងពី Python 3.5 មានមុខងារ gcd() នៅក្នុងម៉ូឌុលគណិតវិទ្យា។ gcd() គឺជាអក្សរកាត់សម្រាប់

  • greatest common divisor

ត្រឡប់​ផ្នែក​រួម​ធំ​បំផុត​នៃ​ចំនួន​គត់​ដែល​បាន​បញ្ជាក់​ក្នុង​អាគុយម៉ង់។

import math

print(math.gcd(6, 4))
# 2

ចំណាំថានៅក្នុង Python 3.4 និងមុននេះ មុខងារ gcd() គឺនៅក្នុងម៉ូឌុលប្រភាគ មិនមែនជាម៉ូឌុលគណិតវិទ្យាទេ។ ប្រភាគត្រូវតែនាំចូល និង fractions.gcd() ។

ភាគបែងសាមញ្ញតិចបំផុត។

អនុគមន៍ lcm() ដែលផ្តល់ផលគុណធម្មតាតិចបំផុត ត្រូវបានបន្ថែមទៅម៉ូឌុលគណិតវិទ្យានៅក្នុង Python 3.9។ lcm គឺជាអក្សរកាត់សម្រាប់

  • least common multiple

ត្រឡប់ផលគុណធម្មតាតិចបំផុតនៃចំនួនគត់ដែលបានបញ្ជាក់ក្នុងអាគុយម៉ង់។

print(math.lcm(6, 4))
# 12

មុនពេល Python 3.8, lcm() មិនត្រូវបានផ្តល់ឱ្យទេ ប៉ុន្តែអាចត្រូវបានគណនាយ៉ាងងាយស្រួលដោយប្រើ gcd() ។

lcm(a, b) = a * b / gcd(a, b)

ឧទាហរណ៍នៃការអនុវត្ត។

def my_lcm(x, y):
    return (x * y) // math.gcd(x, y)

print(my_lcm(6, 4))
# 12

/ចាប់តាំងពីលទ្ធផលនេះបង្កើតជាអណ្តែតទសភាគ សញ្ញាថយក្រោយពីរត្រូវបានប្រើដើម្បីកាត់បន្ថយចំនុចទសភាគ ហើយត្រឡប់លទ្ធផលចែកចំនួនគត់។ ចំណាំថាគ្មានដំណើរការណាមួយត្រូវបានធ្វើឡើងដើម្បីកំណត់ថាតើអាគុយម៉ង់ជាចំនួនគត់ឬអត់។

ចែក​ចែក​ទូទៅ​បំផុត និង​ផល​គុណ​រួម​តិច​បំផុត​នៃ​ចំនួន​គត់​បី​ឬ​ច្រើន។

Python 3.9 ឬក្រោយ

ចាប់ផ្តើមជាមួយ Python 3.9 មុខងារខាងក្រោមទាំងអស់គាំទ្រអាគុយម៉ង់ច្រើនជាងបី។

  • math.gcd()
  • math.lcm()
print(math.gcd(27, 18, 9))
# 9

print(math.gcd(27, 18, 9, 3))
# 3

print(math.lcm(27, 9, 3))
# 27

print(math.lcm(27, 18, 9, 3))
# 54

*ប្រសិនបើ​អ្នក​ចង់​គណនា​ផ្នែក​ចែក​ទូទៅ​បំផុត ឬ​ផលគុណ​សាមញ្ញ​តិចបំផុត​នៃ​ធាតុ​នៃ​បញ្ជី សូម​បញ្ជាក់​អាគុយម៉ង់​ជាមួយ​វា។

l = [27, 18, 9, 3]
print(math.gcd(*l))
# 3

print(math.lcm(*l))
# 54

Python 3.8 ឬមុននេះ។

មុនពេល Python 3.8 មុខងារ gcd() គាំទ្រតែអាគុយម៉ង់ពីរប៉ុណ្ណោះ។

ដើម្បីស្វែងរកផ្នែកចែកទូទៅដ៏ធំបំផុត ឬផលគុណធម្មតាតិចបំផុតនៃចំនួនគត់បី ឬច្រើននោះ គ្មានក្បួនដោះស្រាយស្មុគស្មាញពិសេសគឺត្រូវបានទាមទារ។ គ្រាន់​តែ​គណនា​ចំនួន​ចែក​ទូទៅ​ដ៏​ធំ​បំផុត ឬ​ពហុគុណ​ធម្មតា​តិច​បំផុត​សម្រាប់​តម្លៃ​ច្រើន​នីមួយៗ​ដោយ​ប្រើ​អនុគមន៍​លំដាប់​ខ្ពស់​ reduce()។

GCD

from functools import reduce

def my_gcd(*numbers):
    return reduce(math.gcd, numbers)

print(my_gcd(27, 18, 9))
# 9

print(my_gcd(27, 18, 9, 3))
# 3

l = [27, 18, 9, 3]
print(my_gcd(*l))
# 3

ជាថ្មីម្តងទៀត សូមចំណាំថា មុនពេល Python 3.4 មុខងារ gcd() ស្ថិតនៅក្នុងម៉ូឌុលប្រភាគ មិនមែនជាម៉ូឌុលគណិតវិទ្យាទេ។

ភាគបែងសាមញ្ញតិចបំផុត។

def my_lcm_base(x, y):
    return (x * y) // math.gcd(x, y)

def my_lcm(*numbers):
    return reduce(my_lcm_base, numbers, 1)

print(my_lcm(27, 9, 3))
# 27

print(my_lcm(27, 18, 9, 3))
# 54

l = [27, 18, 9, 3]
print(my_lcm(*l))
# 54