From 2fe12dce586d0023a326262fe82b8d43f25b1f9e Mon Sep 17 00:00:00 2001 From: Hetarth Jodha Date: Fri, 28 Nov 2025 13:49:02 +0530 Subject: [PATCH 1/2] Fix #41222: Implement radical() for 0 in Integer ring --- src/sage/rings/integer.pyx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/sage/rings/integer.pyx b/src/sage/rings/integer.pyx index bdd2a7ce05b..3be2d036752 100644 --- a/src/sage/rings/integer.pyx +++ b/src/sage/rings/integer.pyx @@ -5874,6 +5874,25 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement): flag = self < 0 and proof return objtogen(self).qfbclassno(flag).sage() + def radical(self): + """ + Return the radical of this integer, i.e., the product of its + prime divisors. + + EXAMPLES:: + + sage: 0.radical() + 0 + sage: 10.radical() + 10 + sage: (-12).radical() + 6 + """ + if self.is_zero(): + return self + + return self.factor().radical_value() + def squarefree_part(self, long bound=-1): r""" Return the square free part of `x` (=``self``), i.e., the unique integer From ad8b1474a5205de02147c4cf51eb27e5bb13dedd Mon Sep 17 00:00:00 2001 From: Hetarth Jodha Date: Fri, 28 Nov 2025 21:39:35 +0530 Subject: [PATCH 2/2] Fix signature of radical() to accept args, and update doctests --- src/sage/arith/misc.py | 4 +--- src/sage/categories/unique_factorization_domains.py | 4 +--- src/sage/rings/integer.pyx | 6 +++--- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/sage/arith/misc.py b/src/sage/arith/misc.py index 9fe86a04c6b..6969cf26cc5 100644 --- a/src/sage/arith/misc.py +++ b/src/sage/arith/misc.py @@ -2775,9 +2775,7 @@ def radical(n, *args, **kwds): sage: radical(2 * 3^2 * 5^5) 30 sage: radical(0) - Traceback (most recent call last): - ... - ArithmeticError: radical of 0 is not defined + 0 sage: K. = QuadraticField(-1) # needs sage.rings.number_field sage: radical(K(2)) # needs sage.rings.number_field i - 1 diff --git a/src/sage/categories/unique_factorization_domains.py b/src/sage/categories/unique_factorization_domains.py index f01763d4a7e..ee534d5e3fe 100644 --- a/src/sage/categories/unique_factorization_domains.py +++ b/src/sage/categories/unique_factorization_domains.py @@ -262,9 +262,7 @@ def radical(self, *args, **kwds): sage: Integer(-100).radical() 10 sage: Integer(0).radical() - Traceback (most recent call last): - ... - ArithmeticError: radical of 0 is not defined + 0 The next example shows how to compute the radical of a number, assuming no prime > 100000 has exponent > 1 in the factorization:: diff --git a/src/sage/rings/integer.pyx b/src/sage/rings/integer.pyx index 3be2d036752..de732516d1e 100644 --- a/src/sage/rings/integer.pyx +++ b/src/sage/rings/integer.pyx @@ -5874,7 +5874,7 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement): flag = self < 0 and proof return objtogen(self).qfbclassno(flag).sage() - def radical(self): + def radical(self, *args, **kwds): """ Return the radical of this integer, i.e., the product of its prime divisors. @@ -5890,8 +5890,8 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement): """ if self.is_zero(): return self - - return self.factor().radical_value() + + return self.factor(*args, **kwds).radical_value() def squarefree_part(self, long bound=-1): r"""