Documentation for c26eea874d

This commit is contained in:
realstealthninja
2025-05-19 11:38:33 +00:00
parent c7a9a42397
commit 14583a2f33
2829 changed files with 30266 additions and 21669 deletions

View File

@@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>TheAlgorithms/C++: math/modular_inverse_fermat_little_theorem.cpp File Reference</title>
<link rel="icon" href="../../favicon.svg" type="image/x-icon" />
@@ -60,7 +60,7 @@ window.MathJax = {
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
@@ -174,23 +174,20 @@ Functions</h2></td></tr>
\[ϕ(m) = m-1\]
</p>
<p> where \(m\) is a prime number. </p><p class="formulaDsp">
\begin{eqnarray*}
a \cdot x &amp;&amp; 1 \;\text{mod}\; m\\
\begin{eqnarray*} a \cdot x &amp;&amp; 1 \;\text{mod}\; m\\
x &amp;&amp; a^{-1} \;\text{mod}\; m
\end{eqnarray*}
\end{eqnarray*}
</p>
<p> Using Euler's theorem we can modify the equation. </p><p class="formulaDsp">
\[
a^{ϕ(m)} ≡ 1 \;\text{mod}\; m
\]
\[ a^{ϕ(m)} ≡ 1 \;\text{mod}\; m
\]
</p>
<p> (Where '^' denotes the exponent operator)</p>
<p>Here 'ϕ' is Euler's Totient Function. For modular inverse existence 'a' and 'm' must be relatively primes numbers. To apply Fermat's Little Theorem is necessary that 'm' must be a prime number. Generally in many competitive programming competitions 'm' is either 1000000007 (1e9+7) or 998244353.</p>
<p>We considered m as large prime (1e9+7). \(a^{ϕ(m)} ≡ 1 \;\text{mod}\; m\) (Using Euler's Theorem) \(ϕ(m) = m-1\) using Fermat's Little Theorem. \(a^{m-1} ≡ 1 \;\text{mod}\; m\) Now multiplying both side by \(a^{-1}\). </p><p class="formulaDsp">
\begin{eqnarray*}
a^{m-1} \cdot a^{-1} &amp;&amp; a^{-1} \;\text{mod}\; m\\
\begin{eqnarray*} a^{m-1} \cdot a^{-1} &amp;&amp; a^{-1} \;\text{mod}\; m\\
a^{m-2} &amp;&amp; a^{-1} \;\text{mod}\; m
\end{eqnarray*}
\end{eqnarray*}
</p>
<p>We will find the exponent using binary exponentiation such that the algorithm works in \(O(\log n)\) time.</p>
<p>Examples: -</p><ul>
@@ -358,14 +355,13 @@ false if the number is not prime </dd></dl>
<div class="line"><span class="lineno"> 106</span> }</div>
<div class="line"><span class="lineno"> 107</span> </div>
<div class="line"><span class="lineno"> 108</span> <span class="comment">// Check for invalid cases</span></div>
<div class="line"><span class="lineno"> 109</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="#aba4929409fee35c3cb559e962a544b3e">isPrime</a>(m) || a == 0) {</div>
<div class="line"><span class="lineno"> 109</span> <span class="keywordflow">if</span> (!isPrime(m) || a == 0) {</div>
<div class="line"><span class="lineno"> 110</span> <span class="keywordflow">return</span> -1; <span class="comment">// Invalid input</span></div>
<div class="line"><span class="lineno"> 111</span> }</div>
<div class="line"><span class="lineno"> 112</span> </div>
<div class="line"><span class="lineno"> 113</span> <span class="keywordflow">return</span> <a class="code hl_function" href="../../de/dcf/binary__exponent_8cpp.html#aeb48dce0725e63d19147944f41843c73">binExpo</a>(a, m - 2, m); <span class="comment">// Fermat&#39;s Little Theorem</span></div>
<div class="line"><span class="lineno"> 114</span>}</div>
<div class="ttc" id="abinary__exponent_8cpp_html_aeb48dce0725e63d19147944f41843c73"><div class="ttname"><a href="../../de/dcf/binary__exponent_8cpp.html#aeb48dce0725e63d19147944f41843c73">binExpo</a></div><div class="ttdeci">int binExpo(int a, int b)</div><div class="ttdef"><b>Definition</b> <a href="../../de/dcf/binary__exponent_8cpp_source.html#l00028">binary_exponent.cpp:28</a></div></div>
<div class="ttc" id="amodular__inverse__fermat__little__theorem_8cpp_html_aba4929409fee35c3cb559e962a544b3e"><div class="ttname"><a href="#aba4929409fee35c3cb559e962a544b3e">math::modular_inverse_fermat::isPrime</a></div><div class="ttdeci">bool isPrime(std::int64_t m)</div><div class="ttdoc">Check if an integer is a prime number in time.</div><div class="ttdef"><b>Definition</b> <a href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp_source.html#l00086">modular_inverse_fermat_little_theorem.cpp:86</a></div></div>
</div><!-- fragment -->
</div>
</div>
@@ -387,7 +383,7 @@ false if the number is not prime </dd></dl>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -397,15 +393,16 @@ false if the number is not prime </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp_source.html#l00122">122</a> of file <a class="el" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp_source.html">modular_inverse_fermat_little_theorem.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 122</span> {</div>
<div class="line"><span class="lineno"> 123</span> assert(math::modular_inverse_fermat::modular_inverse(0, 97) == -1);</div>
<div class="line"><span class="lineno"> 124</span> assert(math::modular_inverse_fermat::modular_inverse(15, -2) == -1);</div>
<div class="line"><span class="lineno"> 125</span> assert(math::modular_inverse_fermat::modular_inverse(3, 10) == -1);</div>
<div class="line"><span class="lineno"> 126</span> assert(math::modular_inverse_fermat::modular_inverse(3, 7) == 5);</div>
<div class="line"><span class="lineno"> 127</span> assert(math::modular_inverse_fermat::modular_inverse(1, 101) == 1);</div>
<div class="line"><span class="lineno"> 128</span> assert(math::modular_inverse_fermat::modular_inverse(-1337, 285179) == 165519);</div>
<div class="line"><span class="lineno"> 129</span> assert(math::modular_inverse_fermat::modular_inverse(123456789, 998244353) == 25170271);</div>
<div class="line"><span class="lineno"> 130</span> assert(math::modular_inverse_fermat::modular_inverse(-9876543210, 1000000007) == 784794281);</div>
<div class="line"><span class="lineno"> 123</span> assert(<a class="code hl_function" href="#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(0, 97) == -1);</div>
<div class="line"><span class="lineno"> 124</span> assert(<a class="code hl_function" href="#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(15, -2) == -1);</div>
<div class="line"><span class="lineno"> 125</span> assert(<a class="code hl_function" href="#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(3, 10) == -1);</div>
<div class="line"><span class="lineno"> 126</span> assert(<a class="code hl_function" href="#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(3, 7) == 5);</div>
<div class="line"><span class="lineno"> 127</span> assert(<a class="code hl_function" href="#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(1, 101) == 1);</div>
<div class="line"><span class="lineno"> 128</span> assert(<a class="code hl_function" href="#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(-1337, 285179) == 165519);</div>
<div class="line"><span class="lineno"> 129</span> assert(<a class="code hl_function" href="#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(123456789, 998244353) == 25170271);</div>
<div class="line"><span class="lineno"> 130</span> assert(<a class="code hl_function" href="#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(-9876543210, 1000000007) == 784794281);</div>
<div class="line"><span class="lineno"> 131</span>}</div>
<div class="ttc" id="amodular__inverse__fermat__little__theorem_8cpp_html_ae7e807e02c65c6fffd6162b4c66290c2"><div class="ttname"><a href="#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a></div><div class="ttdeci">std::int64_t modular_inverse(std::int64_t a, std::int64_t m)</div><div class="ttdoc">calculates the modular inverse.</div><div class="ttdef"><b>Definition</b> <a href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp_source.html#l00103">modular_inverse_fermat_little_theorem.cpp:103</a></div></div>
</div><!-- fragment -->
</div>
</div>
@@ -415,7 +412,7 @@ false if the number is not prime </dd></dl>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="../../dir_296d53ceaeaa7e099814a6def439fe8a.html">math</a></li><li class="navelem"><a class="el" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html">modular_inverse_fermat_little_theorem.cpp</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>

View File

@@ -1,8 +1,8 @@
var modular__inverse__fermat__little__theorem_8cpp =
[
[ "binExpo", "d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#a1c62a87e79f29b98d8fe5b12eacdd928", null ],
[ "isPrime", "d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#aba4929409fee35c3cb559e962a544b3e", null ],
[ "math::modular_inverse_fermat::binExpo", "d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#a1c62a87e79f29b98d8fe5b12eacdd928", null ],
[ "math::modular_inverse_fermat::isPrime", "d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#aba4929409fee35c3cb559e962a544b3e", null ],
[ "main", "d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4", null ],
[ "modular_inverse", "d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2", null ],
[ "math::modular_inverse_fermat::modular_inverse", "d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2", null ],
[ "test", "d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#aa8dca7b867074164d5f45b0f3851269d", null ]
];

View File

@@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>TheAlgorithms/C++: math/modular_inverse_fermat_little_theorem.cpp Source File</title>
<link rel="icon" href="../../favicon.svg" type="image/x-icon" />
@@ -60,7 +60,7 @@ window.MathJax = {
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
@@ -124,15 +124,16 @@ $(function(){initNavTree('d8/d53/modular__inverse__fermat__little__theorem_8cpp_
<div class="headertitle"><div class="title">modular_inverse_fermat_little_theorem.cpp</div></div>
</div><!--header-->
<div class="contents">
<a href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span> </div>
<a href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#include &lt;cassert&gt;</span> </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="preprocessor">#include &lt;cstdint&gt;</span> </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#include &lt;iostream&gt;</span> </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="keyword">namespace </span><a class="code hl_namespace" href="../../dd/d47/namespacemath.html">math</a> {</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="keyword">namespace </span><a class="code hl_namespace" href="../../d7/d50/namespacemodular__inverse__fermat.html">modular_inverse_fermat</a> {</div>
<div class="foldopen" id="foldopen00067" data-start="{" data-end="}">
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#a1c62a87e79f29b98d8fe5b12eacdd928"> 67</a></span>std::int64_t <a class="code hl_function" href="../../de/dcf/binary__exponent_8cpp.html#aeb48dce0725e63d19147944f41843c73">binExpo</a>(std::int64_t a, std::int64_t b, std::int64_t m) {</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#a1c62a87e79f29b98d8fe5b12eacdd928"> 67</a></span>std::int64_t <a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#a1c62a87e79f29b98d8fe5b12eacdd928">binExpo</a>(std::int64_t a, std::int64_t b, std::int64_t m) {</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> a %= m;</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> std::int64_t res = 1;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">while</span> (b &gt; 0) {</div>
@@ -146,6 +147,7 @@ $(function(){initNavTree('d8/d53/modular__inverse__fermat__little__theorem_8cpp_
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span>}</div>
</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span></div>
<div class="foldopen" id="foldopen00086" data-start="{" data-end="}">
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"><a class="line" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#aba4929409fee35c3cb559e962a544b3e"> 86</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#aba4929409fee35c3cb559e962a544b3e">isPrime</a>(std::int64_t m) {</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">if</span> (m &lt;= 1) {</div>
@@ -159,6 +161,7 @@ $(function(){initNavTree('d8/d53/modular__inverse__fermat__little__theorem_8cpp_
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span>}</div>
</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span></div>
<div class="foldopen" id="foldopen00103" data-start="{" data-end="}">
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"><a class="line" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2"> 103</a></span>std::int64_t <a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2">modular_inverse</a>(std::int64_t a, std::int64_t m) {</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">while</span> (a &lt; 0) {</div>
@@ -170,45 +173,45 @@ $(function(){initNavTree('d8/d53/modular__inverse__fermat__little__theorem_8cpp_
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">return</span> -1; <span class="comment">// Invalid input</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> }</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> <a class="code hl_function" href="../../de/dcf/binary__exponent_8cpp.html#aeb48dce0725e63d19147944f41843c73">binExpo</a>(a, m - 2, m); <span class="comment">// Fermat&#39;s Little Theorem</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> <a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#a1c62a87e79f29b98d8fe5b12eacdd928">binExpo</a>(a, m - 2, m); <span class="comment">// Fermat&#39;s Little Theorem</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span>}</div>
</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span>} <span class="comment">// namespace modular_inverse_fermat</span></div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span>} <span class="comment">// namespace math</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span></div>
<div class="foldopen" id="foldopen00122" data-start="{" data-end="}">
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#aa8dca7b867074164d5f45b0f3851269d"> 122</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>() {</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> assert(math::modular_inverse_fermat::modular_inverse(0, 97) == -1);</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> assert(math::modular_inverse_fermat::modular_inverse(15, -2) == -1);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> assert(math::modular_inverse_fermat::modular_inverse(3, 10) == -1);</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> assert(math::modular_inverse_fermat::modular_inverse(3, 7) == 5);</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> assert(math::modular_inverse_fermat::modular_inverse(1, 101) == 1);</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> assert(math::modular_inverse_fermat::modular_inverse(-1337, 285179) == 165519);</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> assert(math::modular_inverse_fermat::modular_inverse(123456789, 998244353) == 25170271);</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> assert(math::modular_inverse_fermat::modular_inverse(-9876543210, 1000000007) == 784794281);</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> assert(<a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(0, 97) == -1);</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> assert(<a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(15, -2) == -1);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> assert(<a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(3, 10) == -1);</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> assert(<a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(3, 7) == 5);</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> assert(<a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(1, 101) == 1);</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> assert(<a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(-1337, 285179) == 165519);</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> assert(<a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(123456789, 998244353) == 25170271);</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> assert(<a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a>(-9876543210, 1000000007) == 784794281);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span>}</div>
</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span></div>
<div class="foldopen" id="foldopen00137" data-start="{" data-end="}">
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"><a class="line" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4"> 137</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a>() {</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_function" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>(); <span class="comment">// run self-test implementation</span></div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span>}</div>
</div>
<div class="ttc" id="abinary__exponent_8cpp_html_aeb48dce0725e63d19147944f41843c73"><div class="ttname"><a href="../../de/dcf/binary__exponent_8cpp.html#aeb48dce0725e63d19147944f41843c73">binExpo</a></div><div class="ttdeci">int binExpo(int a, int b)</div><div class="ttdef"><b>Definition</b> <a href="../../de/dcf/binary__exponent_8cpp_source.html#l00028">binary_exponent.cpp:28</a></div></div>
<div class="ttc" id="amodular__inverse__fermat__little__theorem_8cpp_html_a1c62a87e79f29b98d8fe5b12eacdd928"><div class="ttname"><a href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#a1c62a87e79f29b98d8fe5b12eacdd928">math::modular_inverse_fermat::binExpo</a></div><div class="ttdeci">std::int64_t binExpo(std::int64_t a, std::int64_t b, std::int64_t m)</div><div class="ttdoc">Calculate exponent with modulo using binary exponentiation in time.</div><div class="ttdef"><b>Definition</b> <a href="#l00067">modular_inverse_fermat_little_theorem.cpp:67</a></div></div>
<div class="ttc" id="amodular__inverse__fermat__little__theorem_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Self-test implementation.</div><div class="ttdef"><b>Definition</b> <a href="#l00122">modular_inverse_fermat_little_theorem.cpp:122</a></div></div>
<div class="ttc" id="amodular__inverse__fermat__little__theorem_8cpp_html_aba4929409fee35c3cb559e962a544b3e"><div class="ttname"><a href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#aba4929409fee35c3cb559e962a544b3e">math::modular_inverse_fermat::isPrime</a></div><div class="ttdeci">bool isPrime(std::int64_t m)</div><div class="ttdoc">Check if an integer is a prime number in time.</div><div class="ttdef"><b>Definition</b> <a href="#l00086">modular_inverse_fermat_little_theorem.cpp:86</a></div></div>
<div class="ttc" id="amodular__inverse__fermat__little__theorem_8cpp_html_ae66f6b31b5ad750f1fe042a706a4e3d4"><div class="ttname"><a href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a></div><div class="ttdeci">int main()</div><div class="ttdoc">Main function.</div><div class="ttdef"><b>Definition</b> <a href="#l00137">modular_inverse_fermat_little_theorem.cpp:137</a></div></div>
<div class="ttc" id="amodular__inverse__fermat__little__theorem_8cpp_html_ae7e807e02c65c6fffd6162b4c66290c2"><div class="ttname"><a href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html#ae7e807e02c65c6fffd6162b4c66290c2">math::modular_inverse_fermat::modular_inverse</a></div><div class="ttdeci">std::int64_t modular_inverse(std::int64_t a, std::int64_t m)</div><div class="ttdoc">calculates the modular inverse.</div><div class="ttdef"><b>Definition</b> <a href="#l00103">modular_inverse_fermat_little_theorem.cpp:103</a></div></div>
<div class="ttc" id="anamespacemath_html"><div class="ttname"><a href="../../dd/d47/namespacemath.html">math</a></div><div class="ttdoc">for assert</div></div>
<div class="ttc" id="anamespacemodular__inverse__fermat_html"><div class="ttname"><a href="../../d7/d50/namespacemodular__inverse__fermat.html">modular_inverse_fermat</a></div><div class="ttdoc">Calculate modular inverse using Fermat's Little Theorem.</div></div>
<div class="ttc" id="anamespacemodular__inverse__fermat_html"><div class="ttname"><a href="../../d7/d50/namespacemodular__inverse__fermat.html">modular_inverse_fermat</a></div><div class="ttdoc">Calculate modular inverse using Fermat&#39;s Little Theorem.</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="../../dir_296d53ceaeaa7e099814a6def439fe8a.html">math</a></li><li class="navelem"><a class="el" href="../../d8/d53/modular__inverse__fermat__little__theorem_8cpp.html">modular_inverse_fermat_little_theorem.cpp</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0 </li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>