<html><head><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><linkrel="shortcut icon"href="../icons/favicon.ico"/><linkrel="stylesheet"type="text/css"href="../styles/branding.css"/><linkrel="stylesheet"type="text/css"href="../styles/branding-en-US.css"/><scripttype="text/javascript"src="../scripts/branding.js"></script><metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"/><title>gmp_lib.mpn_gcdext Method </title><metaname="Language"content="en-us"/><metaname="System.Keywords"content="mpn_gcdext method"/><metaname="System.Keywords"content="gmp_lib.mpn_gcdext method"/><metaname="Microsoft.Help.F1"content="Math.Gmp.Native.gmp_lib.mpn_gcdext"/><metaname="Microsoft.Help.Id"content="M:Math.Gmp.Native.gmp_lib.mpn_gcdext(Math.Gmp.Native.mp_ptr,Math.Gmp.Native.mp_ptr,Math.Gmp.Native.ptr{Math.Gmp.Native.mp_size_t},Math.Gmp.Native.mp_ptr,Math.Gmp.Native.mp_size_t,Math.Gmp.Native.mp_ptr,Math.Gmp.Native.mp_size_t)"/><metaname="Description"content="Compute the greatest common divisor G of U and V. Compute a cofactor S such that G = US + VT."/><metaname="Microsoft.Help.ContentType"content="Reference"/><metaname="BrandingAware"content="true"/><metaname="container"content="Math.Gmp.Native"/><metaname="file"content="746d102a-5f3e-6142-b02a-63f3cac385ab"/><metaname="guid"content="746d102a-5f3e-6142-b02a-63f3cac385ab"/><linktype="text/css"rel="stylesheet"href="../styles/highlight.css"/><scripttype="text/javascript"src="../scripts/highlight.js"></script><linkrel="stylesheet"type="text/css"href="../styles/branding-Website.css"/><scripttype="text/javascript"src="../scripts/jquery-1.11.0.min.js"></script><scripttype="text/javascript"src="../scripts/branding-Website.js"></script><scripttype="text/javascript"src="../scripts/clipboard.min.js"></script></head><bodyonload="OnLoad('cs')"><inputtype="hidden"id="userDataCache"class="userDataStyle"/><divclass="pageHeader"id="PageHeader">GMP Native Interface for .NET<formid="SearchForm"method="get"action="#"onsubmit="javascript:TransferToSearchPage(); return false;"><inputid="SearchTextBox"type="text"maxlength="200"/><buttonid="SearchButton"type="submit"></button></form></div><divclass="pageBody"><divclass="leftNav"id="leftNav"><divid="tocNav"><divclass="toclevel0"data-toclevel="0"><aclass="tocCollapsed"onclick="javascript: Toggle(this);"href="#!"/><adata-tochassubtree="true"href="846f5c8a-6cba-433e-9f18-cde2ff5695cd.htm"title="GMP Native Interface for .NET"tocid="roottoc">GMP Native Interface for .NET</a></div><divclass="toclevel0"data-toclevel="0"><aclass="tocCollapsed"onclick="javascript: Toggle(this);"href="#!"/><adata-tochassubtree="true"href="d9c51b9f-0c54-770b-28ea-6eebd8fef368.htm"title="Math.Gmp.Native"tocid="d9c51b9f-0c54-770b-28ea-6eebd8fef368">Math.Gmp.Native</a></div><divclass="toclevel0"data-toclevel="0"><aclass="tocCollapsed"onclick="javascript: Toggle(this);"href="#!"/><adata-tochassubtree="true"href="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm"title="gmp_lib Class"tocid="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f">gmp_lib Class</a></div><divclass="toclevel1"data-toclevel="1"data-childrenloaded="true"><aclass="tocExpanded"onclick="javascript: Toggle(this);"href="#!"/><adata-tochassubtree="true"href="0fa7cbf3-e8f4-6b14-d829-8aa663e77c74.htm"title="gmp_lib Methods"tocid="0fa7cbf3-e8f4-6b14-d829-8aa663e77c74">gmp_lib Methods</a></div><divclass="toclevel2"data-toclevel="2"><adata-tochassubtree="false"href="c9cb6a67-59b8-5c03-f31d-f252441c53f6.htm"title="_mpz_realloc Method "tocid="c9cb6a67-59b8-5c03-f31d-f252441c53f6">_mpz_realloc Method </a></div><divclass="toclevel2"data-toclevel="2"><adata-tochassubtree="false"href="2c68671c-cd5c-e2ec-52a2-65b0ca31c3d1.htm"title="allocate Method "tocid="2c68671c-cd5c-e2ec-52a2-65b0ca31c3d1">allocate Method </a></div><divclass="toclevel2"data-toclevel="2"><aclass="tocCollapsed"onclick="javascript: Toggle(this);"href="#!"/><adata-tochassubtree="true"href="92160da3-b1af-e005-cb05-e3fb4dd524d8.htm"ti
Compute the greatest common divisor <spanclass="code">G</span> of <spanclass="code">U</span> and <spanclass="code">V</span>. Compute a cofactor <spanclass="code">S</span> such that <spanclass="code">G = US + VT</span>.
</pre></div></div></div><scripttype="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4class="subHeading">Parameters</h4><dl><dt><spanclass="parameter">gp</span></dt><dd>Type:<ahref="4609ac5e-5cf9-cd20-2fa9-8040101c165c.htm">Math.Gmp.Native<spanid="LSTAB74F05C_1"></span><scripttype="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_ptr</a><br/>The fisrt result operand.</dd><dt><spanclass="parameter">sp</span></dt><dd>Type:<ahref="4609ac5e-5cf9-cd20-2fa9-8040101c165c.htm">Math.Gmp.Native<spanid="LSTAB74F05C_2"></span><scripttype="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_ptr</a><br/>The second result operand.</dd><dt><spanclass="parameter">sn</span></dt><dd>Type:<ahref="542faa00-d28a-72a2-2dd8-6c6021e683ce.htm">Math.Gmp.Native<spanid="LSTAB74F05C_3"></span><scripttype="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ptr</a><spanid="LSTAB74F05C_4"></span><scripttype="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_4?cs=<|vb=(Of |cpp=<|fs=<'|nu=(");</script><ahref="4b58a584-7a0e-b600-18fa-ebd493861eb3.htm">mp_size_t</a><spanid="LSTAB74F05C_5"></span><scripttype="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_5?cs=>|vb=)|cpp=>|fs=>|nu=)");</script><br/>Pointer to the number of limbs of <spanclass="parameter">sp</span>.</dd><dt><spanclass="parameter">up</span></dt><dd>Type:<ahref="4609ac5e-5cf9-cd20-2fa9-8040101c165c.htm">Math.Gmp.Native<spanid="LSTAB74F05C_6"></span><scripttype="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_ptr</a><br/>The first operand integer.</dd><dt><spanclass="parameter">un</span></dt><dd>Type:<ahref="4b58a584-7a0e-b600-18fa-ebd493861eb3.htm">Math.Gmp.Native<spanid="LSTAB74F05C_7"></span><scripttype="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_size_t</a><br/>The number of limbs of <spanclass="parameter">up</span>.</dd><dt><spanclass="parameter">vp</span></dt><dd>Type:<ahref="4609ac5e-5cf9-cd20-2fa9-8040101c165c.htm">Math.Gmp.Native<spanid="LSTAB74F05C_8"></span><scripttype="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_ptr</a><br/>The second operand integer.</dd><dt><spanclass="parameter">vn</span></dt><dd>Type:<ahref="4b58a584-7a0e-b600-18fa-ebd493861eb3.htm">Math.Gmp.Native<spanid="LSTAB74F05C_9"></span><scripttype="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_9?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_size_t</a><br/>The number of limbs of <spanclass="parameter">vp</span>.</dd></dl><h4class="subHeading">Return Value</h4>Type:<ahref="4b58a584-7a0e-b600-18fa-ebd493861eb3.htm">mp_size_t</a><br/>The number of limbs of <spanclass="parameter">gp</span>.</div><divclass="collapsibleAreaRegion"><spanclass="collapsibleRegionTitle"onclick="SectionExpandCollapse('ID2RB')"onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)"tabindex="0"><imgid="ID2RBToggle"class="collapseToggle"src="../icons/SectionExpanded.png"/>Remarks</span></div><divid="ID2RBSection"class="collapsibleSection"><p>
Let <spanclass="code">U</span> be defined by {<spanclass="parameter">up</span>, <spanclass="parameter">un</span>}
and let <spanclass="code">V</span> be defined by {<spanclass="parameter">vp</span>, <spanclass="parameter">vn</span>}.
</p><p>
The second cofactor <spanclass="code">T</span> is not computed but can easily be obtained from <spanclass="code">(G - U * S) / V</span> (the division will be exact).
It is required that <spanclass="code"><spanclass="parameter">un</span> ≥ <spanclass="parameter">vn</span>> 0</span>,
and the most significant limb of {<spanclass="parameter">vp</span>, <spanclass="parameter">vn</span>} must be non-zero.
</p><p>
Store <spanclass="code">G</span> at <spanclass="parameter">gp</span> and let the return value define its limb count.
Store <spanclass="code">S</span> at <spanclass="parameter">sp</span> and let <spanclass="code">|<spanclass="parameter">sn</span>.Value|</span> define its limb count.
<spanclass="code">S</span> can be negative; when this happens <spanclass="code"><spanclass="parameter">sn</span>.Value</span> will be negative.
The area at <spanclass="parameter">gp</span> should have room for <spanclass="parameter">vn</span> limbs
and the area at <spanclass="parameter">sp</span> should have room for <spanclass="code"><spanclass="parameter">vn</span> + 1</span> limbs.
</p><p>
Both source operands are destroyed.
</p><p>
Compatibility notes: GMP 4.3.0 and 4.3.1 defined <spanclass="code">S</span> less strictly.
Earlier as well as later GMP releases define <spanclass="code">S</span> as described here.
GMP releases before GMP 4.3.0 required additional space for both input and output areas.
More precisely, the areas {<spanclass="parameter">up</span>, <spanclass="code"><spanclass="parameter">un</span> + 1</span>} and
{<spanclass="parameter">vp</span>, <spanclass="code"><spanclass="parameter">vn</span> + 1</span>} were destroyed (i.e. the operands
plus an extra limb past the end of each), and the areas pointed to by <spanclass="parameter">gp</span>
and <spanclass="parameter">sp</span> should each have room for <spanclass="code"><spanclass="parameter">un</span> + 1</span> limbs.
<spanclass="highlight-comment">' Set gp = gcd(up, vp).</span>
<spanclass="highlight-keyword">Dim</span> sn <spanclass="highlight-keyword">As</span><spanclass="highlight-keyword">New</span> ptr(<spanclass="highlight-keyword">Of</span> mp_size_t)(<spanclass="highlight-number">0</span>)
gmp_lib.free(gp, up, vp, sp, result, cofactor)</pre></div><divid="ID0EDAABA_code_Div3"class="codeSnippetContainerCode"style="display: none"><p>No code example is currently available or this language may not be supported.</p></div><divid="ID0EDAABA_code_Div4"class="codeSnippetContainerCode"style="display: none"><p>No code example is currently available or this language may not be supported.</p></div></div></div><scripttype="text/javascript">AddLanguageTabSet("ID0EDAABA");</script></div><divclass="collapsibleAreaRegion"id="seeAlsoSection"><spanclass="collapsibleRegionTitle"onclick="SectionExpandCollapse('ID4RB')"onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)"tabindex="0"><imgid="ID4RBToggle"class="collapseToggle"src="../icons/SectionExpanded.png"/>See Also</span></div><divid="ID4RBSection"class="collapsibleSection"><h4class="subHeading">Reference</h4><divclass="seeAlsoStyle"><ahref="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm">gmp_lib Class</a></div><divclass="seeAlsoStyle"><ahref="d9c51b9f-0c54-770b-28ea-6eebd8fef368.htm">Math.Gmp.Native Namespace</a></div><divclass="seeAlsoStyle"><ahref="24ecd2d5-422f-e538-fd43-94b749652393.htm">gmp_lib<spanid="LSTAB74F05C_10"></span><scripttype="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mpn_gcd(mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)</a></div><divclass="seeAlsoStyle"><ahref="64373933-f98b-74b4-c10f-3b1a98c410bc.htm">gmp_lib<spanid="LSTAB74F05C_11"></span><scripttype="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mpn_gcd_1(mp_ptr, mp_size_t, mp_limb_t)</a></div><divclass="seeAlsoStyle"><ahref="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm"><ahref="https://gmplib.org/manual/Low_002dlevel-Functions.html#Low_002dlevel-Functions">GNU MP - Low-level Functions</a></a></div></div></div></div><divid="pageFooter"class="pageFooter"></div></body></html>