mirror of
https://github.com/MachineCognitis/Math.Gmp.Native.git
synced 2024-09-07 17:58:20 +02:00
101 lines
24 KiB
HTML
101 lines
24 KiB
HTML
<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>gmp_lib.mpn_gcdext Method (mp_ptr, mp_ptr, ptr(mp_size_t), mp_ptr, mp_size_t, mp_ptr, mp_size_t)</title><meta name="Language" content="en-us" /><meta name="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)" /><meta name="Description" content="Compute the greatest common divisor G of U and V. Compute a cofactor S such that G = US + VT." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Math.Gmp.Native" /><meta name="file" content="746d102a-5f3e-6142-b02a-63f3cac385ab" /><meta name="guid" content="746d102a-5f3e-6142-b02a-63f3cac385ab" /><link type="text/css" rel="stylesheet" href="../styles/highlight.css" /><script type="text/javascript" src="../scripts/highlight.js"> </script><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script><script type="text/javascript" src="../scripts/clipboard.min.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">GMP Native Interface for .NET<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="846f5c8a-6cba-433e-9f18-cde2ff5695cd.htm" title="GMP Native Interface for .NET" tocid="roottoc">GMP Native Interface for .NET</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="d9c51b9f-0c54-770b-28ea-6eebd8fef368.htm" title="Math.Gmp.Native" tocid="d9c51b9f-0c54-770b-28ea-6eebd8fef368">Math.Gmp.Native</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm" title="gmp_lib Class" tocid="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f">gmp_lib Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="0fa7cbf3-e8f4-6b14-d829-8aa663e77c74.htm" title="gmp_lib Methods" tocid="0fa7cbf3-e8f4-6b14-d829-8aa663e77c74">gmp_lib Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="1d98a5d2-dff5-3fd2-c322-13c56beabb21.htm" title="mpn_gcdext Method " tocid="1d98a5d2-dff5-3fd2-c322-13c56beabb21">mpn_gcdext Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="c7536923-2242-a346-3211-02806aebd69f.htm" title="mpn_gcdext Method (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_ptr, mp_size_t)" tocid="c7536923-2242-a346-3211-02806aebd69f">mpn_gcdext Method (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_ptr, mp_size_t)</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="746d102a-5f3e-6142-b02a-63f3cac385ab.htm" title="mpn_gcdext Method (mp_ptr, mp_ptr, ptr(mp_size_t), mp_ptr, mp_size_t, mp_ptr, mp_size_t)" tocid="746d102a-5f3e-6142-b02a-63f3cac385ab">mpn_gcdext Method (mp_ptr, mp_ptr, ptr(mp_size_t), mp_ptr, mp_size_t, mp_ptr, mp_size_t)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">gmp_lib<span id="LSTAB74F05C_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_0?cpp=::|nu=.");</script>mpn_gcdext Method (mp_ptr, mp_ptr, ptr<span id="LSTAB74F05C_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_1?cs=<|vb=(Of |cpp=<|fs=<'|nu=(");</script>mp_size_t<span id="LSTAB74F05C_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_2?cs=>|vb=)|cpp=>|fs=>|nu=)");</script>, mp_ptr, mp_size_t, mp_ptr, mp_size_t)</td></tr></table><span class="introStyle"></span> <div class="summary">
|
||
Compute the greatest common divisor G of U and V. Compute a cofactor S such that G = US + VT.
|
||
</div><p> </p>
|
||
<strong>Namespace:</strong>
|
||
<a href="d9c51b9f-0c54-770b-28ea-6eebd8fef368.htm">Math.Gmp.Native</a><br />
|
||
<strong>Assembly:</strong>
|
||
Math.Gmp.Native (in Math.Gmp.Native.dll) Version: 1.0.0.0 (1.0.0.0)<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" class="copyCodeSnippet" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">mp_size_t</span> <span class="identifier">mpn_gcdext</span>(
|
||
<span class="identifier">mp_ptr</span> <span class="parameter">gp</span>,
|
||
<span class="identifier">mp_ptr</span> <span class="parameter">sp</span>,
|
||
<span class="identifier">ptr</span><<span class="identifier">mp_size_t</span>> <span class="parameter">sn</span>,
|
||
<span class="identifier">mp_ptr</span> <span class="parameter">up</span>,
|
||
<span class="identifier">mp_size_t</span> <span class="parameter">un</span>,
|
||
<span class="identifier">mp_ptr</span> <span class="parameter">vp</span>,
|
||
<span class="identifier">mp_size_t</span> <span class="parameter">vn</span>
|
||
)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">mpn_gcdext</span> (
|
||
<span class="parameter">gp</span> <span class="keyword">As</span> <span class="identifier">mp_ptr</span>,
|
||
<span class="parameter">sp</span> <span class="keyword">As</span> <span class="identifier">mp_ptr</span>,
|
||
<span class="parameter">sn</span> <span class="keyword">As</span> <span class="identifier">ptr</span>(<span class="keyword">Of</span> <span class="identifier">mp_size_t</span>),
|
||
<span class="parameter">up</span> <span class="keyword">As</span> <span class="identifier">mp_ptr</span>,
|
||
<span class="parameter">un</span> <span class="keyword">As</span> <span class="identifier">mp_size_t</span>,
|
||
<span class="parameter">vp</span> <span class="keyword">As</span> <span class="identifier">mp_ptr</span>,
|
||
<span class="parameter">vn</span> <span class="keyword">As</span> <span class="identifier">mp_size_t</span>
|
||
) <span class="keyword">As</span> <span class="identifier">mp_size_t</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
|
||
<span class="keyword">static</span> <span class="identifier">mp_size_t</span> <span class="identifier">mpn_gcdext</span>(
|
||
<span class="identifier">mp_ptr</span>^ <span class="parameter">gp</span>,
|
||
<span class="identifier">mp_ptr</span>^ <span class="parameter">sp</span>,
|
||
<span class="identifier">ptr</span><<span class="identifier">mp_size_t</span>>^ <span class="parameter">sn</span>,
|
||
<span class="identifier">mp_ptr</span>^ <span class="parameter">up</span>,
|
||
<span class="identifier">mp_size_t</span> <span class="parameter">un</span>,
|
||
<span class="identifier">mp_ptr</span>^ <span class="parameter">vp</span>,
|
||
<span class="identifier">mp_size_t</span> <span class="parameter">vn</span>
|
||
)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">mpn_gcdext</span> :
|
||
<span class="parameter">gp</span> : <span class="identifier">mp_ptr</span> *
|
||
<span class="parameter">sp</span> : <span class="identifier">mp_ptr</span> *
|
||
<span class="parameter">sn</span> : <span class="identifier">ptr</span><<span class="identifier">mp_size_t</span>> *
|
||
<span class="parameter">up</span> : <span class="identifier">mp_ptr</span> *
|
||
<span class="parameter">un</span> : <span class="identifier">mp_size_t</span> *
|
||
<span class="parameter">vp</span> : <span class="identifier">mp_ptr</span> *
|
||
<span class="parameter">vn</span> : <span class="identifier">mp_size_t</span> <span class="keyword">-></span> <span class="identifier">mp_size_t</span>
|
||
</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">gp</span></dt><dd>Type: <a href="4609ac5e-5cf9-cd20-2fa9-8040101c165c.htm">Math.Gmp.Native<span id="LSTAB74F05C_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_ptr</a><br />The fisrt result operand.</dd><dt><span class="parameter">sp</span></dt><dd>Type: <a href="4609ac5e-5cf9-cd20-2fa9-8040101c165c.htm">Math.Gmp.Native<span id="LSTAB74F05C_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_ptr</a><br />The second result operand.</dd><dt><span class="parameter">sn</span></dt><dd>Type: <a href="542faa00-d28a-72a2-2dd8-6c6021e683ce.htm">Math.Gmp.Native<span id="LSTAB74F05C_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ptr</a><span id="LSTAB74F05C_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_6?cs=<|vb=(Of |cpp=<|fs=<'|nu=(");</script><a href="4b58a584-7a0e-b600-18fa-ebd493861eb3.htm">mp_size_t</a><span id="LSTAB74F05C_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_7?cs=>|vb=)|cpp=>|fs=>|nu=)");</script><br />Pointer to the number of limbs of <span class="parameter">sp</span>.</dd><dt><span class="parameter">up</span></dt><dd>Type: <a href="4609ac5e-5cf9-cd20-2fa9-8040101c165c.htm">Math.Gmp.Native<span id="LSTAB74F05C_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_ptr</a><br />The first operand integer.</dd><dt><span class="parameter">un</span></dt><dd>Type: <a href="4b58a584-7a0e-b600-18fa-ebd493861eb3.htm">Math.Gmp.Native<span id="LSTAB74F05C_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_9?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_size_t</a><br />The number of limbs of <span class="parameter">up</span>.</dd><dt><span class="parameter">vp</span></dt><dd>Type: <a href="4609ac5e-5cf9-cd20-2fa9-8040101c165c.htm">Math.Gmp.Native<span id="LSTAB74F05C_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_ptr</a><br />The second operand integer.</dd><dt><span class="parameter">vn</span></dt><dd>Type: <a href="4b58a584-7a0e-b600-18fa-ebd493861eb3.htm">Math.Gmp.Native<span id="LSTAB74F05C_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB74F05C_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>mp_size_t</a><br />The number of limbs of <span class="parameter">vp</span>.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="4b58a584-7a0e-b600-18fa-ebd493861eb3.htm">mp_size_t</a><br />The number of limbs of <span class="parameter">gp</span>.</div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Remarks</span></div><div id="ID2RBSection" class="collapsibleSection"><p>
|
||
Let U be defined by {<span class="parameter">up</span>, <span class="parameter">un</span>}
|
||
and let V be defined by {<span class="parameter">vp</span>, <span class="parameter">vn</span>}.
|
||
</p><p>
|
||
The second cofactor T is not computed but can easily be obtained from (G - U * S) / V (the division will be exact).
|
||
It is required that <span class="parameter">un</span> ≥ <span class="parameter">vn</span> > 0,
|
||
and the most significant limb of {<span class="parameter">vp</span>, <span class="parameter">vn</span>} must be non-zero.
|
||
</p><p>
|
||
Store G at <span class="parameter">gp</span> and let the return value define its limb count.
|
||
Store S at <span class="parameter">sp</span> and let | <span class="parameter">sn</span>.Value | define its limb count.
|
||
S can be negative; when this happens <span class="parameter">sn</span>.Value will be negative.
|
||
The area at <span class="parameter">gp</span> should have room for <span class="parameter">vn</span> limbs
|
||
and the area at <span class="parameter">sp</span> should have room for <span class="parameter">vn</span> + 1 limbs.
|
||
</p><p>
|
||
Both source operands are destroyed.
|
||
</p><p>
|
||
Compatibility notes: GMP 4.3.0 and 4.3.1 defined S less strictly.
|
||
Earlier as well as later GMP releases define S as described here.
|
||
GMP releases before GMP 4.3.0 required additional space for both input and output areas.
|
||
More precisely, the areas {<span class="parameter">up</span>, <span class="parameter">un</span> + 1} and
|
||
{<span class="parameter">vp</span>, <span class="parameter">vn</span> + 1} were destroyed (i.e. the operands
|
||
plus an extra limb past the end of each), and the areas pointed to by <span class="parameter">gp</span>
|
||
and <span class="parameter">sp</span> should each have room for <span class="parameter">un</span> + 1 limbs.
|
||
</p></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Examples</span></div><div id="ID3RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDAABA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDAABA','cs','1','4');return false;">C#</a></div><div id="ID0EDAABA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDAABA','vb','2','4');return false;">VB</a></div><div id="ID0EDAABA_tab3" class="codeSnippetContainerTabPhantom"><a href="#" onclick="javascript:ChangeTab('ID0EDAABA','cpp','3','4');return false;">C++</a></div><div id="ID0EDAABA_tab4" class="codeSnippetContainerTabPhantom"><a href="#" onclick="javascript:ChangeTab('ID0EDAABA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDAABA_copyCode" href="#" class="copyCodeSnippet" onclick="javascript:CopyToClipboard('ID0EDAABA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDAABA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="highlight-comment">// Create multi-precision operands, and expected result.</span>
|
||
mp_ptr up = <span class="highlight-keyword">new</span> mp_ptr(<span class="highlight-keyword">new</span> <span class="highlight-keyword">uint</span>[] { <span class="highlight-number">0x40000000</span>, <span class="highlight-number">0x00000000</span> });
|
||
mp_ptr vp = <span class="highlight-keyword">new</span> mp_ptr(<span class="highlight-keyword">new</span> <span class="highlight-keyword">uint</span>[] { <span class="highlight-number">0x00000000</span>, <span class="highlight-number">0x00000001</span> });
|
||
mp_ptr gp = <span class="highlight-keyword">new</span> mp_ptr(<span class="highlight-keyword">new</span> <span class="highlight-keyword">uint</span>[vp.Size * (IntPtr.Size / <span class="highlight-number">4</span>)]);
|
||
mp_ptr sp = <span class="highlight-keyword">new</span> mp_ptr(<span class="highlight-keyword">new</span> <span class="highlight-keyword">uint</span>[(vp.Size + <span class="highlight-number">1</span>) * (IntPtr.Size / <span class="highlight-number">4</span>)]);
|
||
mp_ptr result = <span class="highlight-keyword">new</span> mp_ptr(<span class="highlight-keyword">new</span> <span class="highlight-keyword">uint</span>[] { <span class="highlight-number">0x40000000</span>, <span class="highlight-number">0x00000000</span> });
|
||
mp_ptr cofactor = <span class="highlight-keyword">new</span> mp_ptr(<span class="highlight-keyword">new</span> <span class="highlight-keyword">uint</span>[] { <span class="highlight-number">0x00000001</span>, <span class="highlight-number">0x00000000</span>, <span class="highlight-number">0x00000000</span> });
|
||
|
||
<span class="highlight-comment">// Set gp = gcd(up, vp).</span>
|
||
ptr<mp_size_t> sn = <span class="highlight-keyword">new</span> ptr<mp_size_t>(<span class="highlight-number">0</span>);
|
||
mp_size_t size = gmp_lib.mpn_gcdext(gp, sp, sn, up, up.Size, vp, vp.Size);
|
||
|
||
<span class="highlight-comment">// Assert result.</span>
|
||
Assert.IsTrue(size == <span class="highlight-number">1</span>);
|
||
Assert.IsTrue(gp.SequenceEqual(result));
|
||
Assert.IsTrue(sn.Value == <span class="highlight-number">1</span>);
|
||
Assert.IsTrue(sp.SequenceEqual(cofactor));
|
||
|
||
<span class="highlight-comment">// Release unmanaged memory.</span>
|
||
gmp_lib.free(gp, up, vp, sp, result, cofactor);</pre></div><div id="ID0EDAABA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="highlight-comment">' Create multi-precision operands, and expected result.</span>
|
||
<span class="highlight-keyword">Dim</span> up <span class="highlight-keyword">As</span> <span class="highlight-keyword">New</span> mp_ptr(<span class="highlight-keyword">New</span> <span class="highlight-keyword">UInteger</span>() { <span class="highlight-number">&H40000000</span>, <span class="highlight-number">&H0</span>})
|
||
<span class="highlight-keyword">Dim</span> vp <span class="highlight-keyword">As</span> <span class="highlight-keyword">New</span> mp_ptr(<span class="highlight-keyword">New</span> <span class="highlight-keyword">UInteger</span>() { <span class="highlight-number">&H0</span>, <span class="highlight-number">&H1</span>})
|
||
<span class="highlight-keyword">Dim</span> gp <span class="highlight-keyword">As</span> <span class="highlight-keyword">New</span> mp_ptr(<span class="highlight-keyword">New</span> <span class="highlight-keyword">UInteger</span>(vp.Size* (IntPtr.Size / <span class="highlight-number">4</span>) - <span class="highlight-number">1</span>) {})
|
||
<span class="highlight-keyword">Dim</span> sp <span class="highlight-keyword">As</span> <span class="highlight-keyword">New</span> mp_ptr(<span class="highlight-keyword">New</span> <span class="highlight-keyword">UInteger</span>((vp.Size + <span class="highlight-number">1</span>) * (IntPtr.Size / <span class="highlight-number">4</span>) - <span class="highlight-number">1</span>) {})
|
||
<span class="highlight-keyword">Dim</span> result <span class="highlight-keyword">As</span> <span class="highlight-keyword">New</span> mp_ptr(<span class="highlight-keyword">New</span> <span class="highlight-keyword">UInteger</span>() { <span class="highlight-number">&H40000000</span>, <span class="highlight-number">&H0</span>})
|
||
<span class="highlight-keyword">Dim</span> cofactor <span class="highlight-keyword">As</span> <span class="highlight-keyword">New</span> mp_ptr(<span class="highlight-keyword">New</span> <span class="highlight-keyword">UInteger</span>() { <span class="highlight-number">&H1</span>, <span class="highlight-number">&H0</span>, <span class="highlight-number">&H0</span>})
|
||
|
||
<span class="highlight-comment">' Set gp = gcd(up, vp).</span>
|
||
<span class="highlight-keyword">Dim</span> sn <span class="highlight-keyword">As</span> <span class="highlight-keyword">New</span> ptr(<span class="highlight-keyword">Of</span> mp_size_t)(<span class="highlight-number">0</span>)
|
||
<span class="highlight-keyword">Dim</span> size <span class="highlight-keyword">As</span> mp_size_t = gmp_lib.mpn_gcdext(gp, sp, sn, up, up.Size, vp, vp.Size)
|
||
|
||
<span class="highlight-comment">' Assert result.</span>
|
||
Assert.IsTrue(size = <span class="highlight-number">1</span>)
|
||
Assert.IsTrue(gp.SequenceEqual(result))
|
||
Assert.IsTrue(sn.Value = <span class="highlight-number">1</span>)
|
||
Assert.IsTrue(sp.SequenceEqual(cofactor))
|
||
|
||
<span class="highlight-comment">' Release unmanaged memory.</span>
|
||
gmp_lib.free(gp, up, vp, sp, result, cofactor)</pre></div><div id="ID0EDAABA_code_Div3" class="codeSnippetContainerCode" style="display: none"><p>No code example is currently available or this language may not be supported.</p></div><div id="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><script type="text/javascript">AddLanguageTabSet("ID0EDAABA");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm">gmp_lib Class</a></div><div class="seeAlsoStyle"><a href="1d98a5d2-dff5-3fd2-c322-13c56beabb21.htm">mpn_gcdext Overload</a></div><div class="seeAlsoStyle"><a href="d9c51b9f-0c54-770b-28ea-6eebd8fef368.htm">Math.Gmp.Native Namespace</a></div><div class="seeAlsoStyle"><a href="24ecd2d5-422f-e538-fd43-94b749652393.htm">mpn_gcd</a></div><div class="seeAlsoStyle"><a href="64373933-f98b-74b4-c10f-3b1a98c410bc.htm">mpn_gcd_1</a></div><div class="seeAlsoStyle"><a href="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm"><a href="/html/3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm#Low_level_Functions">Low-level Functions</a></a></div><div class="seeAlsoStyle"><a href="3af6b34c-3242-2b75-e7c7-ab79af8a4b0f.htm"><a href="https://gmplib.org/manual/Low_002dlevel-Functions.html#Low_002dlevel-Functions">GNU MP - Low-level Functions</a></a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> |