diff options
author | ananthan-123 <ananthakrishnan15.2001@gmail.com> | 2020-02-19 18:21:37 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-19 18:21:37 (GMT) |
commit | f2ee21d858bc03dd801b97afe60ee2ea289e2fe9 (patch) | |
tree | 7a35d8b02a53df4505d275b67bc56462cda33619 /Modules/mathmodule.c | |
parent | 4dee92b0ad9f4e3ea2fbbbb5253340801bb92dc7 (diff) | |
download | cpython-f2ee21d858bc03dd801b97afe60ee2ea289e2fe9.zip cpython-f2ee21d858bc03dd801b97afe60ee2ea289e2fe9.tar.gz cpython-f2ee21d858bc03dd801b97afe60ee2ea289e2fe9.tar.bz2 |
bpo-39479:Add math.lcm() function: Least Common Multiple (#18547)
* Update math.rst
* Update math.rst
* updated whats new
* Update test_math.py
* Update mathmodule.c
* Update mathmodule.c.h
* Update ACKS
* 📜🤖 Added by blurb_it.
* Update 3.9.rst
* Update 2020-02-18-12-37-16.bpo-39479.j3UcCq.rst
* Update math.rst
* Update 2020-02-18-12-37-16.bpo-39479.j3UcCq.rst
* Update test_math.py
* Update ACKS
* Update mathmodule.c.h
* Update mathmodule.c
* Update mathmodule.c.h
* Update mathmodule.c.h
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Diffstat (limited to 'Modules/mathmodule.c')
-rw-r--r-- | Modules/mathmodule.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index 309f229..f74b7e1 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -2018,6 +2018,59 @@ math_factorial(PyObject *module, PyObject *arg) /*[clinic input] +math.lcm + x as a: object + y as b: object + / +least common multiple of x and y +[clinic start generated code]*/ + +static PyObject * +math_lcm_impl(PyObject *module, PyObject *a, PyObject *b) +/*[clinic end generated code: output=6f83fb6d671074ba input=efb3d7b7334b7118]*/ +{ + PyObject *g, *m, *f, *ab; + + a = PyNumber_Index(a); + if (a == NULL) { + return NULL; + } + b = PyNumber_Index(b); + if (b == NULL) { + Py_DECREF(a); + return NULL; + } + if (_PyLong_Sign(a) == 0 || _PyLong_Sign(b) == 0) { + Py_DECREF(a); + Py_DECREF(b); + return PyLong_FromLong(0); + } + g = _PyLong_GCD(a, b); + if (g == NULL) { + Py_DECREF(a); + Py_DECREF(b); + return NULL; + } + f = PyNumber_FloorDivide(a, g); + Py_DECREF(g); + Py_DECREF(a); + if (f == NULL) { + Py_DECREF(b); + return NULL; + } + m = PyNumber_Multiply(f, b); + Py_DECREF(f); + Py_DECREF(b); + if (m == NULL) { + return NULL; + } + ab = PyNumber_Absolute(m); + Py_DECREF(m); + return ab; +} + + +/*[clinic input] math.trunc x: object @@ -3362,6 +3415,7 @@ static PyMethodDef math_methods[] = { MATH_ISINF_METHODDEF MATH_ISNAN_METHODDEF MATH_ISQRT_METHODDEF + MATH_LCM_METHODDEF MATH_LDEXP_METHODDEF {"lgamma", math_lgamma, METH_O, math_lgamma_doc}, MATH_LOG_METHODDEF |