|
|
|
|
@@ -0,0 +1,425 @@
|
|
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
|
|
|
<head>
|
|
|
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
|
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
|
|
|
<meta name="generator" content="Doxygen 1.9.1"/>
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
|
|
|
<title>Algorithms_in_C++: divide_and_conquer/karatsuba_algorithm_for_fast_multiplication.cpp File Reference</title>
|
|
|
|
|
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
|
|
|
|
<script type="text/javascript" src="../../jquery.js"></script>
|
|
|
|
|
<script type="text/javascript" src="../../dynsections.js"></script>
|
|
|
|
|
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
|
|
|
|
|
<script type="text/javascript" src="../../resize.js"></script>
|
|
|
|
|
<script type="text/javascript" src="../../navtreedata.js"></script>
|
|
|
|
|
<script type="text/javascript" src="../../navtree.js"></script>
|
|
|
|
|
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
|
|
|
|
|
<script type="text/javascript" src="../../search/searchdata.js"></script>
|
|
|
|
|
<script type="text/javascript" src="../../search/search.js"></script>
|
|
|
|
|
<script type="text/x-mathjax-config">
|
|
|
|
|
MathJax.Hub.Config({
|
|
|
|
|
extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
|
|
|
|
|
jax: ["input/TeX","output/HTML-CSS"],
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML/MathJax.js"></script>
|
|
|
|
|
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
|
|
|
<div id="titlearea">
|
|
|
|
|
<table cellspacing="0" cellpadding="0">
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr style="height: 56px;">
|
|
|
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
|
|
|
<div id="projectname">Algorithms_in_C++
|
|
|
|
|
 <span id="projectnumber">1.0.0</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="projectbrief">Set of algorithms implemented in C++.</div>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- end header part -->
|
|
|
|
|
<!-- Generated by Doxygen 1.9.1 -->
|
|
|
|
|
<script type="text/javascript">
|
|
|
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
|
|
|
var searchBox = new SearchBox("searchBox", "../../search",false,'Search','.html');
|
|
|
|
|
/* @license-end */
|
|
|
|
|
</script>
|
|
|
|
|
<script type="text/javascript" src="../../menudata.js"></script>
|
|
|
|
|
<script type="text/javascript" src="../../menu.js"></script>
|
|
|
|
|
<script type="text/javascript">
|
|
|
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
|
|
|
$(function() {
|
|
|
|
|
initMenu('../../',true,false,'search.php','Search');
|
|
|
|
|
$(document).ready(function() { init_search(); });
|
|
|
|
|
});
|
|
|
|
|
/* @license-end */</script>
|
|
|
|
|
<div id="main-nav"></div>
|
|
|
|
|
</div><!-- top -->
|
|
|
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
|
|
|
<div id="nav-tree">
|
|
|
|
|
<div id="nav-tree-contents">
|
|
|
|
|
<div id="nav-sync" class="sync"></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
|
|
|
class="ui-resizable-handle">
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<script type="text/javascript">
|
|
|
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
|
|
|
$(document).ready(function(){initNavTree('da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html','../../'); initResizable(); });
|
|
|
|
|
/* @license-end */
|
|
|
|
|
</script>
|
|
|
|
|
<div id="doc-content">
|
|
|
|
|
<!-- window showing the filter options -->
|
|
|
|
|
<div id="MSearchSelectWindow"
|
|
|
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
|
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
|
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
|
|
|
<div id="MSearchResultsWindow">
|
|
|
|
|
<iframe src="javascript:void(0)" frameborder="0"
|
|
|
|
|
name="MSearchResults" id="MSearchResults">
|
|
|
|
|
</iframe>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="header">
|
|
|
|
|
<div class="summary">
|
|
|
|
|
<a href="#namespaces">Namespaces</a> |
|
|
|
|
|
<a href="#func-members">Functions</a> </div>
|
|
|
|
|
<div class="headertitle">
|
|
|
|
|
<div class="title">karatsuba_algorithm_for_fast_multiplication.cpp File Reference</div> </div>
|
|
|
|
|
</div><!--header-->
|
|
|
|
|
<div class="contents">
|
|
|
|
|
|
|
|
|
|
<p>Implementation of the <a href="https://en.wikipedia.org/wiki/Karatsuba_algorithm">Karatsuba algorithm for fast multiplication</a>
|
|
|
|
|
<a href="#details">More...</a></p>
|
|
|
|
|
<div class="textblock"><code>#include <cassert></code><br />
|
|
|
|
|
<code>#include <cstring></code><br />
|
|
|
|
|
<code>#include <iostream></code><br />
|
|
|
|
|
<code>#include <vector></code><br />
|
|
|
|
|
</div><div class="textblock"><div class="dynheader">
|
|
|
|
|
Include dependency graph for karatsuba_algorithm_for_fast_multiplication.cpp:</div>
|
|
|
|
|
<div class="dyncontent">
|
|
|
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d0/d2c/karatsuba__algorithm__for__fast__multiplication_8cpp__incl.svg" width="344" height="142"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div><table class="memberdecls">
|
|
|
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
|
|
|
|
|
Namespaces</h2></td></tr>
|
|
|
|
|
<tr class="memitem:dd/dba/namespacedivide__and__conquer"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="../../dd/dba/namespacedivide__and__conquer.html">divide_and_conquer</a></td></tr>
|
|
|
|
|
<tr class="memdesc:dd/dba/namespacedivide__and__conquer"><td class="mdescLeft"> </td><td class="mdescRight">for <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a> <br /></td></tr>
|
|
|
|
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
|
|
|
|
<tr class="memitem:de/d41/namespacekaratsuba__algorithm"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="../../de/d41/namespacekaratsuba__algorithm.html">karatsuba_algorithm</a></td></tr>
|
|
|
|
|
<tr class="memdesc:de/d41/namespacekaratsuba__algorithm"><td class="mdescLeft"> </td><td class="mdescRight">Functions for the <a href="https://en.wikipedia.org/wiki/Karatsuba_algorithm">Karatsuba algorithm for fast multiplication</a> <br /></td></tr>
|
|
|
|
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
|
|
|
|
</table><table class="memberdecls">
|
|
|
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
|
|
|
|
Functions</h2></td></tr>
|
|
|
|
|
<tr class="memitem:a7d1dbae365c7746295d3322e6f7f80b6"><td class="memItemLeft" align="right" valign="top"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html#a7d1dbae365c7746295d3322e6f7f80b6">divide_and_conquer::karatsuba_algorithm::addStrings</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> first, <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> second)</td></tr>
|
|
|
|
|
<tr class="memdesc:a7d1dbae365c7746295d3322e6f7f80b6"><td class="mdescLeft"> </td><td class="mdescRight">Helper function for the main function, that implements Karatsuba's algorithm for fast multiplication. <a href="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html#a7d1dbae365c7746295d3322e6f7f80b6">More...</a><br /></td></tr>
|
|
|
|
|
<tr class="separator:a7d1dbae365c7746295d3322e6f7f80b6"><td class="memSeparator" colspan="2"> </td></tr>
|
|
|
|
|
<tr class="memitem:a7a890d2f26855ada3b9f1d43aec70a86"><td class="memItemLeft" align="right" valign="top">int64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html#a7a890d2f26855ada3b9f1d43aec70a86">divide_and_conquer::karatsuba_algorithm::karatsuba_algorithm</a> (<a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> str1, <a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> str2)</td></tr>
|
|
|
|
|
<tr class="memdesc:a7a890d2f26855ada3b9f1d43aec70a86"><td class="mdescLeft"> </td><td class="mdescRight">The main function implements Karatsuba's algorithm for fast multiplication. <a href="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html#a7a890d2f26855ada3b9f1d43aec70a86">More...</a><br /></td></tr>
|
|
|
|
|
<tr class="separator:a7a890d2f26855ada3b9f1d43aec70a86"><td class="memSeparator" colspan="2"> </td></tr>
|
|
|
|
|
<tr class="memitem:aa8dca7b867074164d5f45b0f3851269d"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a> ()</td></tr>
|
|
|
|
|
<tr class="memdesc:aa8dca7b867074164d5f45b0f3851269d"><td class="mdescLeft"> </td><td class="mdescRight">Self-test implementations. <a href="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">More...</a><br /></td></tr>
|
|
|
|
|
<tr class="separator:aa8dca7b867074164d5f45b0f3851269d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
|
|
|
<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
|
|
|
|
|
<tr class="memdesc:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="mdescLeft"> </td><td class="mdescRight">Main function. <a href="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">More...</a><br /></td></tr>
|
|
|
|
|
<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2"> </td></tr>
|
|
|
|
|
</table>
|
|
|
|
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
|
|
|
|
<div class="textblock"><p>Implementation of the <a href="https://en.wikipedia.org/wiki/Karatsuba_algorithm">Karatsuba algorithm for fast multiplication</a> </p>
|
|
|
|
|
<p>Given two strings in binary notation we want to multiply them and return the value Simple approach is to multiply bits one by one which will give the time complexity of around O(n^2). To make it more efficient we will be using Karatsuba' algorithm to find the product which will solve the problem O(nlogn) of time. </p><dl class="section author"><dt>Author</dt><dd><a href="https://github.com/Swastyy">Swastika Gupta</a> </dd></dl>
|
|
|
|
|
</div><h2 class="groupheader">Function Documentation</h2>
|
|
|
|
|
<a id="a7d1dbae365c7746295d3322e6f7f80b6"></a>
|
|
|
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a7d1dbae365c7746295d3322e6f7f80b6">◆ </a></span>addStrings()</h2>
|
|
|
|
|
|
|
|
|
|
<div class="memitem">
|
|
|
|
|
<div class="memproto">
|
|
|
|
|
<table class="memname">
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="memname"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> divide_and_conquer::karatsuba_algorithm::addStrings </td>
|
|
|
|
|
<td>(</td>
|
|
|
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> </td>
|
|
|
|
|
<td class="paramname"><em>first</em>, </td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="paramkey"></td>
|
|
|
|
|
<td></td>
|
|
|
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> </td>
|
|
|
|
|
<td class="paramname"><em>second</em> </td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td></td>
|
|
|
|
|
<td>)</td>
|
|
|
|
|
<td></td><td></td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
</div><div class="memdoc">
|
|
|
|
|
|
|
|
|
|
<p>Helper function for the main function, that implements Karatsuba's algorithm for fast multiplication. </p>
|
|
|
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
|
|
|
<table class="params">
|
|
|
|
|
<tr><td class="paramname">first</td><td>the input string 1 </td></tr>
|
|
|
|
|
<tr><td class="paramname">second</td><td>the input string 2 </td></tr>
|
|
|
|
|
</table>
|
|
|
|
|
</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
<dl class="section return"><dt>Returns</dt><dd>the concatenated string </dd></dl>
|
|
|
|
|
<div class="fragment"><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div>
|
|
|
|
|
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <a class="code" href="../../de/dc3/fibonacci__sum_8cpp.html#aadb40ac4c74a7efc0680b83eeee138aa">result</a>; <span class="comment">// To store the resulting sum bits</span></div>
|
|
|
|
|
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  </div>
|
|
|
|
|
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  int64_t len1 = first.<a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">size</a>();</div>
|
|
|
|
|
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  int64_t len2 = second.<a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">size</a>();</div>
|
|
|
|
|
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  int64_t length = <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(len1, len2);</div>
|
|
|
|
|
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> zero = <span class="stringliteral">"0"</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">if</span> (len1 < len2) <span class="comment">// make the string lengths equal</span></div>
|
|
|
|
|
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  {</div>
|
|
|
|
|
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">for</span> (int64_t i = 0; i < len2 - len1; i++) {</div>
|
|
|
|
|
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  zero += first;</div>
|
|
|
|
|
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  first = zero;</div>
|
|
|
|
|
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div>
|
|
|
|
|
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len1 > len2) {</div>
|
|
|
|
|
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  zero = <span class="stringliteral">"0"</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">for</span> (int64_t i = 0; i < len1 - len2; i++) {</div>
|
|
|
|
|
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  zero += second;</div>
|
|
|
|
|
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  second = zero;</div>
|
|
|
|
|
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div>
|
|
|
|
|
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div>
|
|
|
|
|
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  int64_t carry = 0;</div>
|
|
|
|
|
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">for</span> (int64_t i = length - 1; i >= 0; i--) {</div>
|
|
|
|
|
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  int64_t firstBit = first.<a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/at.html">at</a>(i) - <span class="charliteral">'0'</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  int64_t secondBit = second.<a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/at.html">at</a>(i) - <span class="charliteral">'0'</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div>
|
|
|
|
|
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  int64_t <a class="code" href="../../d8/d77/namespacemachine__learning.html#a5305cc18d11943d3dc0d66e70d7e9c44">sum</a> = (firstBit ^ secondBit ^ carry) + <span class="charliteral">'0'</span>; <span class="comment">// sum of 3 bits</span></div>
|
|
|
|
|
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> temp;</div>
|
|
|
|
|
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  temp = <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(<a class="code" href="../../d8/d77/namespacemachine__learning.html#a5305cc18d11943d3dc0d66e70d7e9c44">sum</a>);</div>
|
|
|
|
|
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  temp += <a class="code" href="../../de/dc3/fibonacci__sum_8cpp.html#aadb40ac4c74a7efc0680b83eeee138aa">result</a>;</div>
|
|
|
|
|
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="../../de/dc3/fibonacci__sum_8cpp.html#aadb40ac4c74a7efc0680b83eeee138aa">result</a> = temp;</div>
|
|
|
|
|
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div>
|
|
|
|
|
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  carry = (firstBit & secondBit) | (secondBit & carry) |</div>
|
|
|
|
|
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  (firstBit & carry); <span class="comment">// sum of 3 bits</span></div>
|
|
|
|
|
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  }</div>
|
|
|
|
|
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div>
|
|
|
|
|
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">if</span> (carry) {</div>
|
|
|
|
|
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="../../de/dc3/fibonacci__sum_8cpp.html#aadb40ac4c74a7efc0680b83eeee138aa">result</a> = <span class="charliteral">'1'</span> + <a class="code" href="../../de/dc3/fibonacci__sum_8cpp.html#aadb40ac4c74a7efc0680b83eeee138aa">result</a>; <span class="comment">// adding 1 incase of overflow</span></div>
|
|
|
|
|
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div>
|
|
|
|
|
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">return</span> <a class="code" href="../../de/dc3/fibonacci__sum_8cpp.html#aadb40ac4c74a7efc0680b83eeee138aa">result</a>;</div>
|
|
|
|
|
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
|
|
|
|
|
<div class="ttc" id="aat_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/at.html">std::string::at</a></div><div class="ttdeci">T at(T... args)</div></div>
|
|
|
|
|
<div class="ttc" id="abasic_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div></div>
|
|
|
|
|
<div class="ttc" id="afibonacci__sum_8cpp_html_aadb40ac4c74a7efc0680b83eeee138aa"><div class="ttname"><a href="../../de/dc3/fibonacci__sum_8cpp.html#aadb40ac4c74a7efc0680b83eeee138aa">math::fibonacci_sum::result</a></div><div class="ttdeci">uint64_t result(uint64_t n)</div><div class="ttdef"><b>Definition:</b> fibonacci_sum.cpp:76</div></div>
|
|
|
|
|
<div class="ttc" id="amax_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a></div><div class="ttdeci">T max(T... args)</div></div>
|
|
|
|
|
<div class="ttc" id="anamespacemachine__learning_html_a5305cc18d11943d3dc0d66e70d7e9c44"><div class="ttname"><a href="../../d8/d77/namespacemachine__learning.html#a5305cc18d11943d3dc0d66e70d7e9c44">machine_learning::sum</a></div><div class="ttdeci">T sum(const std::vector< std::valarray< T >> &A)</div><div class="ttdef"><b>Definition:</b> vector_ops.hpp:232</div></div>
|
|
|
|
|
<div class="ttc" id="asize_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">std::string::size</a></div><div class="ttdeci">T size(T... args)</div></div>
|
|
|
|
|
<div class="ttc" id="ato_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a></div><div class="ttdeci">T to_string(T... args)</div></div>
|
|
|
|
|
</div><!-- fragment --><div class="dynheader">
|
|
|
|
|
Here is the call graph for this function:</div>
|
|
|
|
|
<div class="dyncontent">
|
|
|
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp_a7d1dbae365c7746295d3322e6f7f80b6_cgraph.svg" width="370" height="240"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<a id="a7a890d2f26855ada3b9f1d43aec70a86"></a>
|
|
|
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a7a890d2f26855ada3b9f1d43aec70a86">◆ </a></span>karatsuba_algorithm()</h2>
|
|
|
|
|
|
|
|
|
|
<div class="memitem">
|
|
|
|
|
<div class="memproto">
|
|
|
|
|
<table class="memname">
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="memname">int64_t divide_and_conquer::karatsuba_algorithm::karatsuba_algorithm </td>
|
|
|
|
|
<td>(</td>
|
|
|
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> </td>
|
|
|
|
|
<td class="paramname"><em>str1</em>, </td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="paramkey"></td>
|
|
|
|
|
<td></td>
|
|
|
|
|
<td class="paramtype"><a class="elRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> </td>
|
|
|
|
|
<td class="paramname"><em>str2</em> </td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td></td>
|
|
|
|
|
<td>)</td>
|
|
|
|
|
<td></td><td></td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
</div><div class="memdoc">
|
|
|
|
|
|
|
|
|
|
<p>The main function implements Karatsuba's algorithm for fast multiplication. </p>
|
|
|
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
|
|
|
<table class="params">
|
|
|
|
|
<tr><td class="paramname">str1</td><td>the input string 1 </td></tr>
|
|
|
|
|
<tr><td class="paramname">str2</td><td>the input string 2 </td></tr>
|
|
|
|
|
</table>
|
|
|
|
|
</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
<dl class="section return"><dt>Returns</dt><dd>the multiplicative number value </dd></dl>
|
|
|
|
|
<div class="fragment"><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {</div>
|
|
|
|
|
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  int64_t len1 = str1.<a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">size</a>();</div>
|
|
|
|
|
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  int64_t len2 = str2.<a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">size</a>();</div>
|
|
|
|
|
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  int64_t n = <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(len1, len2);</div>
|
|
|
|
|
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> zero = <span class="stringliteral">"0"</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">if</span> (len1 < len2) {</div>
|
|
|
|
|
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">for</span> (int64_t i = 0; i < len2 - len1; i++) {</div>
|
|
|
|
|
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  zero += str1;</div>
|
|
|
|
|
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  str1 = zero;</div>
|
|
|
|
|
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div>
|
|
|
|
|
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (len1 > len2) {</div>
|
|
|
|
|
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  zero = <span class="stringliteral">"0"</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">for</span> (int64_t i = 0; i < len1 - len2; i++) {</div>
|
|
|
|
|
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  zero += str2;</div>
|
|
|
|
|
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  str2 = zero;</div>
|
|
|
|
|
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</div>
|
|
|
|
|
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  }</div>
|
|
|
|
|
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">if</span> (n == 0) {</div>
|
|
|
|
|
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">return</span> 0;</div>
|
|
|
|
|
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div>
|
|
|
|
|
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span> (n == 1) {</div>
|
|
|
|
|
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">return</span> (str1[0] - <span class="charliteral">'0'</span>) * (str2[0] - <span class="charliteral">'0'</span>);</div>
|
|
|
|
|
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div>
|
|
|
|
|
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  int64_t fh = n / 2; <span class="comment">// first half of string</span></div>
|
|
|
|
|
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  int64_t sh = (n - fh); <span class="comment">// second half of string</span></div>
|
|
|
|
|
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  </div>
|
|
|
|
|
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> Xl = str1.<a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/substr.html">substr</a>(0, fh); <span class="comment">// first half of first string</span></div>
|
|
|
|
|
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> Xr = str1.<a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/substr.html">substr</a>(fh, sh); <span class="comment">// second half of first string</span></div>
|
|
|
|
|
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  </div>
|
|
|
|
|
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> Yl = str2.<a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/substr.html">substr</a>(0, fh); <span class="comment">// first half of second string</span></div>
|
|
|
|
|
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> Yr = str2.<a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string/substr.html">substr</a>(fh, sh); <span class="comment">// second half of second string</span></div>
|
|
|
|
|
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  </div>
|
|
|
|
|
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="comment">// Calculating the three products of inputs of size n/2 recursively</span></div>
|
|
|
|
|
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  int64_t product1 = <a class="code" href="../../de/d41/namespacekaratsuba__algorithm.html">karatsuba_algorithm</a>(Xl, Yl);</div>
|
|
|
|
|
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  int64_t product2 = <a class="code" href="../../de/d41/namespacekaratsuba__algorithm.html">karatsuba_algorithm</a>(Xr, Yr);</div>
|
|
|
|
|
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  int64_t product3 = <a class="code" href="../../de/d41/namespacekaratsuba__algorithm.html">karatsuba_algorithm</a>(</div>
|
|
|
|
|
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  divide_and_conquer::karatsuba_algorithm::addStrings(Xl, Xr),</div>
|
|
|
|
|
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  divide_and_conquer::karatsuba_algorithm::addStrings(Yl, Yr));</div>
|
|
|
|
|
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  </div>
|
|
|
|
|
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">return</span> product1 * (1 << (2 * sh)) +</div>
|
|
|
|
|
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  (product3 - product1 - product2) * (1 << sh) +</div>
|
|
|
|
|
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  product2; <span class="comment">// combining the three products to get the final result.</span></div>
|
|
|
|
|
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
|
|
|
|
|
<div class="ttc" id="anamespacekaratsuba__algorithm_html"><div class="ttname"><a href="../../de/d41/namespacekaratsuba__algorithm.html">karatsuba_algorithm</a></div><div class="ttdoc">Functions for the Karatsuba algorithm for fast multiplication</div></div>
|
|
|
|
|
<div class="ttc" id="asubstr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/substr.html">std::string::substr</a></div><div class="ttdeci">T substr(T... args)</div></div>
|
|
|
|
|
</div><!-- fragment --><div class="dynheader">
|
|
|
|
|
Here is the call graph for this function:</div>
|
|
|
|
|
<div class="dyncontent">
|
|
|
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp_a7a890d2f26855ada3b9f1d43aec70a86_cgraph.svg" width="568" height="255"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<a id="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
|
|
|
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">◆ </a></span>main()</h2>
|
|
|
|
|
|
|
|
|
|
<div class="memitem">
|
|
|
|
|
<div class="memproto">
|
|
|
|
|
<table class="memname">
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="memname">int main </td>
|
|
|
|
|
<td>(</td>
|
|
|
|
|
<td class="paramtype">void </td>
|
|
|
|
|
<td class="paramname"></td><td>)</td>
|
|
|
|
|
<td></td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
</div><div class="memdoc">
|
|
|
|
|
|
|
|
|
|
<p>Main function. </p>
|
|
|
|
|
<dl class="section return"><dt>Returns</dt><dd>0 on exit </dd></dl>
|
|
|
|
|
<div class="fragment"><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  {</div>
|
|
|
|
|
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <a class="code" href="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a>(); <span class="comment">// run self-test implementations</span></div>
|
|
|
|
|
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">return</span> 0;</div>
|
|
|
|
|
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
|
|
|
|
|
<div class="ttc" id="akaratsuba__algorithm__for__fast__multiplication_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdoc">Self-test implementations.</div><div class="ttdef"><b>Definition:</b> karatsuba_algorithm_for_fast_multiplication.cpp:134</div></div>
|
|
|
|
|
</div><!-- fragment --><div class="dynheader">
|
|
|
|
|
Here is the call graph for this function:</div>
|
|
|
|
|
<div class="dyncontent">
|
|
|
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph.svg" width="274" height="38"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<a id="aa8dca7b867074164d5f45b0f3851269d"></a>
|
|
|
|
|
<h2 class="memtitle"><span class="permalink"><a href="#aa8dca7b867074164d5f45b0f3851269d">◆ </a></span>test()</h2>
|
|
|
|
|
|
|
|
|
|
<div class="memitem">
|
|
|
|
|
<div class="memproto">
|
|
|
|
|
<table class="mlabels">
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="mlabels-left">
|
|
|
|
|
<table class="memname">
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="memname">static void test </td>
|
|
|
|
|
<td>(</td>
|
|
|
|
|
<td class="paramname"></td><td>)</td>
|
|
|
|
|
<td></td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
</td>
|
|
|
|
|
<td class="mlabels-right">
|
|
|
|
|
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
</div><div class="memdoc">
|
|
|
|
|
|
|
|
|
|
<p>Self-test implementations. </p>
|
|
|
|
|
<dl class="section return"><dt>Returns</dt><dd>void </dd></dl>
|
|
|
|
|
<div class="fragment"><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div>
|
|
|
|
|
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="comment">// 1st test</span></div>
|
|
|
|
|
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> s11 = <span class="stringliteral">"1"</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> s12 = <span class="stringliteral">"1010"</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"1st test... "</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  assert(divide_and_conquer::karatsuba_algorithm::karatsuba_algorithm(</div>
|
|
|
|
|
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  s11, s12) == 10); <span class="comment">// here the multiplication is 10</span></div>
|
|
|
|
|
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"passed"</span> << <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
|
|
|
|
|
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  </div>
|
|
|
|
|
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">// 2nd test</span></div>
|
|
|
|
|
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> s21 = <span class="stringliteral">"11"</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> s22 = <span class="stringliteral">"1010"</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"2nd test... "</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  assert(divide_and_conquer::karatsuba_algorithm::karatsuba_algorithm(</div>
|
|
|
|
|
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  s21, s22) == 30); <span class="comment">// here the multiplication is 30</span></div>
|
|
|
|
|
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"passed"</span> << <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
|
|
|
|
|
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  </div>
|
|
|
|
|
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="comment">// 3rd test</span></div>
|
|
|
|
|
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> s31 = <span class="stringliteral">"110"</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> s32 = <span class="stringliteral">"1010"</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"3rd test... "</span>;</div>
|
|
|
|
|
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  assert(divide_and_conquer::karatsuba_algorithm::karatsuba_algorithm(</div>
|
|
|
|
|
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  s31, s32) == 60); <span class="comment">// here the multiplication is 60</span></div>
|
|
|
|
|
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a> << <span class="stringliteral">"passed"</span> << <a class="codeRef" target="_blank" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
|
|
|
|
|
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div>
|
|
|
|
|
<div class="ttc" id="abasic_ostream_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/basic_ostream.html">std::cout</a></div></div>
|
|
|
|
|
<div class="ttc" id="aendl_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div><div class="ttdeci">T endl(T... args)</div></div>
|
|
|
|
|
</div><!-- fragment --><div class="dynheader">
|
|
|
|
|
Here is the call graph for this function:</div>
|
|
|
|
|
<div class="dyncontent">
|
|
|
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp_aa8dca7b867074164d5f45b0f3851269d_cgraph.svg" width="175" height="38"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</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_93bc990c5cceb745f78af6949e9ef947.html">divide_and_conquer</a></li><li class="navelem"><a class="el" href="../../da/dd3/karatsuba__algorithm__for__fast__multiplication_8cpp.html">karatsuba_algorithm_for_fast_multiplication.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.9.1 </li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|