TheAlgorithms-C/d5/d3d/problem__5_2sol2_8c.html

260 lines
16 KiB
HTML
Raw Normal View History

<!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=11"/>
<meta name="generator" content="Doxygen 1.9.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Algorithms_in_C: project_euler/problem_5/sol2.c 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">&#160;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.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search",'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:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(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:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('d5/d3d/problem__5_2sol2_8c.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="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a> </div>
<div class="headertitle"><div class="title">sol2.c File Reference</div></div>
</div><!--header-->
<div class="contents">
<p><a href="https://projecteuler.net/problem=5" target="_blank">Problem 5</a> solution - Naive algorithm (Improved over <a class="el" href="../../dc/d32/problem__5_2sol1_8c.html" title="Problem 5 solution - Naive algorithm (slowest)">problem_5/sol1.c</a>)
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br />
<code>#include &lt;stdlib.h&gt;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for sol2.c:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d8/d68/problem__5_2sol2_8c__incl.svg" width="160" height="127"><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 id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:aa7cfa5a28d00d93ec48fab9c3fd5812f"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d3d/problem__5_2sol2_8c.html#aa7cfa5a28d00d93ec48fab9c3fd5812f">check_number</a> (unsigned long long n)</td></tr>
<tr class="memdesc:aa7cfa5a28d00d93ec48fab9c3fd5812f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a given number is devisable by every number between 1 and 20. <a href="../../d5/d3d/problem__5_2sol2_8c.html#aa7cfa5a28d00d93ec48fab9c3fd5812f">More...</a><br /></td></tr>
<tr class="separator:aa7cfa5a28d00d93ec48fab9c3fd5812f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a840291bc02cba5474a4cb46a9b9566fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d3d/problem__5_2sol2_8c.html#a840291bc02cba5474a4cb46a9b9566fe">main</a> (void)</td></tr>
<tr class="memdesc:a840291bc02cba5474a4cb46a9b9566fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Main function. <a href="../../d5/d3d/problem__5_2sol2_8c.html#a840291bc02cba5474a4cb46a9b9566fe">More...</a><br /></td></tr>
<tr class="separator:a840291bc02cba5474a4cb46a9b9566fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:adb59595677da81f071c34f3847fdbaa6"><td class="memItemLeft" align="right" valign="top">static unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d3d/problem__5_2sol2_8c.html#adb59595677da81f071c34f3847fdbaa6">divisors</a> []</td></tr>
<tr class="memdesc:adb59595677da81f071c34f3847fdbaa6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hack to store divisors between 1 &amp; 20. <a href="../../d5/d3d/problem__5_2sol2_8c.html#adb59595677da81f071c34f3847fdbaa6">More...</a><br /></td></tr>
<tr class="separator:adb59595677da81f071c34f3847fdbaa6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p ><a href="https://projecteuler.net/problem=5" target="_blank">Problem 5</a> solution - Naive algorithm (Improved over <a class="el" href="../../dc/d32/problem__5_2sol1_8c.html" title="Problem 5 solution - Naive algorithm (slowest)">problem_5/sol1.c</a>) </p>
<p >Little bit improved version of the naive <code><a class="el" href="../../dc/d32/problem__5_2sol1_8c.html" title="Problem 5 solution - Naive algorithm (slowest)">problem_5/sol1.c</a></code>. Since the number has to be divisable by 20, we can start at 20 and go in 20 steps. Also we don't have to check against any number, since most of them are implied by other divisions (i.e. if a number is divisable by 20, it's also divisable by 2, 5, and 10). This all gives a 97% perfomance increase on my machine (9.562 vs 0.257)</p>
<dl class="section see"><dt>See also</dt><dd>Slower: <a class="el" href="../../dc/d32/problem__5_2sol1_8c.html" title="Problem 5 solution - Naive algorithm (slowest)">problem_5/sol1.c</a> </dd>
<dd>
Faster: <a class="el" href="../../d5/d7c/problem__5_2sol3_8c.html" title="Problem 5 solution (Fastest).">problem_5/sol3.c</a> </dd></dl>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="aa7cfa5a28d00d93ec48fab9c3fd5812f" name="aa7cfa5a28d00d93ec48fab9c3fd5812f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa7cfa5a28d00d93ec48fab9c3fd5812f">&#9670;&nbsp;</a></span>check_number()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static int check_number </td>
<td>(</td>
<td class="paramtype">unsigned long long&#160;</td>
<td class="paramname"><em>n</em></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>Checks if a given number is devisable by every number between 1 and 20. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">n</td><td>number to check </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if not divisible </dd>
<dd>
1 if divisible </dd></dl>
<div class="fragment"><div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span>{</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 7; ++i)</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> {</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">if</span> (n % <a class="code hl_variable" href="../../d5/d3d/problem__5_2sol2_8c.html#adb59595677da81f071c34f3847fdbaa6">divisors</a>[i] != 0)</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> {</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> }</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> }</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span>}</div>
<div class="ttc" id="aproblem__5_2sol2_8c_html_adb59595677da81f071c34f3847fdbaa6"><div class="ttname"><a href="../../d5/d3d/problem__5_2sol2_8c.html#adb59595677da81f071c34f3847fdbaa6">divisors</a></div><div class="ttdeci">static unsigned int divisors[]</div><div class="ttdoc">Hack to store divisors between 1 &amp; 20.</div><div class="ttdef"><b>Definition:</b> sol2.c:21</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a840291bc02cba5474a4cb46a9b9566fe" name="a840291bc02cba5474a4cb46a9b9566fe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a840291bc02cba5474a4cb46a9b9566fe">&#9670;&nbsp;</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&#160;</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 id="l00049" name="l00049"></a><span class="lineno"> 49</span>{</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> n = 20;; n += 20)</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> {</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="../../d5/d3d/problem__5_2sol2_8c.html#aa7cfa5a28d00d93ec48fab9c3fd5812f">check_number</a>(n))</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> {</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> printf(<span class="stringliteral">&quot;Result: %llu\n&quot;</span>, n);</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> }</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> }</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>}</div>
<div class="ttc" id="aproblem__5_2sol2_8c_html_aa7cfa5a28d00d93ec48fab9c3fd5812f"><div class="ttname"><a href="../../d5/d3d/problem__5_2sol2_8c.html#aa7cfa5a28d00d93ec48fab9c3fd5812f">check_number</a></div><div class="ttdeci">static int check_number(unsigned long long n)</div><div class="ttdoc">Checks if a given number is devisable by every number between 1 and 20.</div><div class="ttdef"><b>Definition:</b> sol2.c:30</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="../../d5/d3d/problem__5_2sol2_8c_a840291bc02cba5474a4cb46a9b9566fe_cgraph.svg" width="216" 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>
<h2 class="groupheader">Variable Documentation</h2>
<a id="adb59595677da81f071c34f3847fdbaa6" name="adb59595677da81f071c34f3847fdbaa6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adb59595677da81f071c34f3847fdbaa6">&#9670;&nbsp;</a></span>divisors</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">unsigned int divisors[]</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">= {</div>
<div class="line"> 11, 13, 14, 16, 17, 18, 19, 20,</div>
<div class="line">}</div>
</div><!-- fragment -->
<p>Hack to store divisors between 1 &amp; 20. </p>
</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_b3d331eabd4234f247030c297aaf021c.html">project_euler</a></li><li class="navelem"><a class="el" href="../../dir_607f15d36c772334f988bb9ef82d102c.html">problem_5</a></li><li class="navelem"><a class="el" href="../../d5/d3d/problem__5_2sol2_8c.html">sol2.c</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.2 </li>
</ul>
</div>
</body>
</html>