1 | initial version |

The function you are looking for is `isqrt`

(for "integer square root").

```
sage: isqrt(124)
11
```

Also available as a method of integers:

```
sage: 124.isqrt()
11
```

2 | No.2 Revision |

~~The ~~(Edited to take comment into account.)

For square roots, the function you are looking for is `isqrt`

(for "integer square root").

```
sage: isqrt(124)
11
```

Also available as a method of integers:

```
sage: 124.isqrt()
11
```

For n-th roots with n other than 2, one can build on @castor's answer and define:

```
def inthroot(a, n):
"""
Return the integer `n`-th root of `a`, rounded towards zero.
EXAMPLES::
sage: a, b, c, d, e, f = 26, 27, 28, -26, -27, -28
sage: inthroot(a, 3)
2
sage: inthroot(b, 3)
3
sage: inthroot(c, 3)
3
sage: inthroot(d, 3)
-2
sage: inthroot(e, 3)
-3
sage: inthroot(f, 3)
-3
"""
return a.nth_root(n, truncate_mode=True)[0]
```

The `[0]`

at the end discards the boolean indicating whether the n-th root
extraction was exact.

Alternatively, one could imagine modifying the `nth_root`

method
in `src/sage/rings/integer.pyx`

, adding an optional argument to say
whether one wants that boolean or not. The call sequence would
change from the current

```
def nth_root(self, int n, bint truncate_mode=0):
```

to either

```
def nth_root(self, int n, bint truncate_mode=0, bint return_whether_exact=1):
```

or

```
def nth_root(self, int n, bint truncate_mode=0, bint return_whether_exact=0):
```

depending on whether we decide the default should be to return that boolean or not.

To check the current version of the `nth_root`

method, do this:

```
sage: a = 2
sage: a.nth_root??
```

or look at it online, say at GitHub:

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.