# llModPow

*LSL function*

```lsl
integer integer llModPow(integer base, integer exponent, integer modulus);
```

- `integer base`: 32-bit unsigned integer base.
- `integer exponent`: 32-bit unsigned integer exponent.
- `integer modulus`: 32-bit unsigned integer modulus.

- Returns: `integer`
- Energy: 10

Returns base raised to the power exponent, modulo modulus (i.e., (b^e)%m). All inputs are wrapped to unsigned 32-bit integer range [0..4294967295]. Output is wrapped to signed 32-bit integer range [-2147483648..2147483647]. Will never overflow, unlike (b^e), which can overflow to inf.

Returns an [integer](https://wiki.secondlife.com/wiki/integer) that is **a** raised to the **b** power, mod **c**. ( (**a**\*\***b**)%**c** )

```lsl title="How to use" frame="terminal"
integer result = llModPow(0, 0, 0);
```

## Examples

<details open>
<summary>Example 1</summary>

```lsl
integer x = llModPow(13743, 14200, 10000); // = 1
integer y = llModPow(0xc734abfa, 0x8371b314, 0xffffffff); // = -1481328730, corresponding to unsigned value of 2813638566
```

</details>

## Notes

- Internally, the parameters are considered unsigned integers. This means it's possible to get extra range by using negative values or hexadecimal, and interpreting the result as such as well.
- This function used to have a forced delay of 1.0 and precision issues before an update in January 2025.[^wiki-4fe61f]

[^wiki-4fe61f]: Reported , fixed in January 2025: https://feedback.secondlife.com/scripting-bugs/p/getting-wrong-results-from-llmodpow

---

*Source: [LlModPow](https://wiki.secondlife.com/wiki/LlModPow) on the Second Life Wiki. Content from the Second Life Wiki article LlModPow (revision 1217920, 2025-01-30), CC BY-SA 3.0.*

---

From lsl.dev: https://lsl.dev/functions/llModPow/
