mirror of
https://github.moeyy.xyz/https://github.com/TheAlgorithms/C.git
synced 2023-10-11 15:56:24 +08:00
252 lines
16 KiB
HTML
252 lines
16 KiB
HTML
<!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" lang="en-US">
|
|
<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.5"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>Algorithms_in_C: project_euler/problem_14/sol1.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 id="projectrow">
|
|
<td id="projectalign">
|
|
<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.5 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
var searchBox = new SearchBox("searchBox", "../../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&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&dn=expat.txt MIT */
|
|
$(document).ready(function(){initNavTree('d4/dea/problem__14_2sol1_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">
|
|
<div id="MSearchResults">
|
|
<div class="SRPage">
|
|
<div id="SRIndex">
|
|
<div id="SRResults"></div>
|
|
<div class="SRStatus" id="Loading">Loading...</div>
|
|
<div class="SRStatus" id="Searching">Searching...</div>
|
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="header">
|
|
<div class="summary">
|
|
<a href="#func-members">Functions</a> </div>
|
|
<div class="headertitle"><div class="title">sol1.c File Reference</div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
|
|
<p><a href="https://projecteuler.net/problem=14" target="_blank">Problem 14</a> solution
|
|
<a href="#details">More...</a></p>
|
|
<div class="textblock"><code>#include <stdio.h></code><br />
|
|
<code>#include <stdlib.h></code><br />
|
|
<code>#include <omp.h></code><br />
|
|
</div><div class="textblock"><div class="dynheader">
|
|
Include dependency graph for sol1.c:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../dc/d55/problem__14_2sol1_8c__incl.svg" width="243" height="124"><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:a81c1df5c17cb16bcc16e346fcff6fa80"><td class="memItemLeft" align="right" valign="top">long long </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dea/problem__14_2sol1_8c.html#a81c1df5c17cb16bcc16e346fcff6fa80">collatz</a> (long long start_num)</td></tr>
|
|
<tr class="memdesc:a81c1df5c17cb16bcc16e346fcff6fa80"><td class="mdescLeft"> </td><td class="mdescRight">Computes the length of collatz sequence for a given starting number. <a href="../../d4/dea/problem__14_2sol1_8c.html#a81c1df5c17cb16bcc16e346fcff6fa80">More...</a><br /></td></tr>
|
|
<tr class="separator:a81c1df5c17cb16bcc16e346fcff6fa80"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/dea/problem__14_2sol1_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
|
|
<tr class="memdesc:a3c04138a5bfe5d72780bb7e82a18e627"><td class="mdescLeft"> </td><td class="mdescRight">Main function. <a href="../../d4/dea/problem__14_2sol1_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">More...</a><br /></td></tr>
|
|
<tr class="separator:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memSeparator" colspan="2"> </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=14" target="_blank">Problem 14</a> solution </p>
|
|
<dl class="section author"><dt>Author</dt><dd><a href="https://github.com/kvedala" target="_blank">Krishna Vedala</a></dd></dl>
|
|
<p>Since the computational values for each iteration step are independent, we can compute them in parallel. However, the maximum values should be updated in synchrony so that we do not get into a "race condition".</p>
|
|
<p >To compile with supporintg gcc or clang, the flag "-fopenmp" should be passes while with Microsoft C compiler, the flag "/fopenmp" should be used. If you are using the provided CMAKE compilation, it will automatically detect OPENMP and compile with it for you.</p>
|
|
<p >Automatically detects for OPENMP using the _OPENMP macro. </p>
|
|
</div><h2 class="groupheader">Function Documentation</h2>
|
|
<a id="a81c1df5c17cb16bcc16e346fcff6fa80" name="a81c1df5c17cb16bcc16e346fcff6fa80"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a81c1df5c17cb16bcc16e346fcff6fa80">◆ </a></span>collatz()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">long long collatz </td>
|
|
<td>(</td>
|
|
<td class="paramtype">long long </td>
|
|
<td class="paramname"><em>start_num</em></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Computes the length of collatz sequence for a given starting number. </p>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 28</span>{</div>
|
|
<div class="line"><span class="lineno"> 29</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> length = 1;</div>
|
|
<div class="line"><span class="lineno"> 30</span> </div>
|
|
<div class="line"><span class="lineno"> 31</span> <span class="keywordflow">while</span> (start_num != 1) <span class="comment">/* loop till we reach 1 */</span></div>
|
|
<div class="line"><span class="lineno"> 32</span> {</div>
|
|
<div class="line"><span class="lineno"> 33</span> <span class="keywordflow">if</span> (start_num & 0x01) <span class="comment">/* check for odd */</span></div>
|
|
<div class="line"><span class="lineno"> 34</span> start_num = 3 * start_num + 1;</div>
|
|
<div class="line"><span class="lineno"> 35</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><span class="lineno"> 36</span> start_num >>= 1; <span class="comment">/* simpler divide by 2 */</span></div>
|
|
<div class="line"><span class="lineno"> 37</span> length++;</div>
|
|
<div class="line"><span class="lineno"> 38</span> }</div>
|
|
<div class="line"><span class="lineno"> 39</span> </div>
|
|
<div class="line"><span class="lineno"> 40</span> <span class="keywordflow">return</span> length;</div>
|
|
<div class="line"><span class="lineno"> 41</span>}</div>
|
|
</div><!-- fragment -->
|
|
</div>
|
|
</div>
|
|
<a id="a3c04138a5bfe5d72780bb7e82a18e627" name="a3c04138a5bfe5d72780bb7e82a18e627"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a3c04138a5bfe5d72780bb7e82a18e627">◆ </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">int </td>
|
|
<td class="paramname"><em>argc</em>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype">char ** </td>
|
|
<td class="paramname"><em>argv</em> </td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>)</td>
|
|
<td></td><td></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Main function. </p>
|
|
<div class="fragment"><div class="line"><span class="lineno"> 45</span>{</div>
|
|
<div class="line"><span class="lineno"> 46</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> max_len = 0, max_len_num = 0;</div>
|
|
<div class="line"><span class="lineno"> 47</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> MAX_NUM = 1000000;</div>
|
|
<div class="line"><span class="lineno"> 48</span> </div>
|
|
<div class="line"><span class="lineno"> 49</span> <span class="keywordflow">if</span> (argc ==</div>
|
|
<div class="line"><span class="lineno"> 50</span> 2) <span class="comment">/* set commandline argumnet as the maximum iteration number */</span></div>
|
|
<div class="line"><span class="lineno"> 51</span> {</div>
|
|
<div class="line"><span class="lineno"> 52</span> MAX_NUM = atoll(argv[1]);</div>
|
|
<div class="line"><span class="lineno"> 53</span> printf(<span class="stringliteral">"Maximum number: %lld\n"</span>, MAX_NUM);</div>
|
|
<div class="line"><span class="lineno"> 54</span> }</div>
|
|
<div class="line"><span class="lineno"> 55</span> </div>
|
|
<div class="line"><span class="lineno"> 56</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> i;</div>
|
|
<div class="line"><span class="lineno"> 57</span><span class="preprocessor">#ifdef _OPENMP</span></div>
|
|
<div class="line"><span class="lineno"> 58</span><span class="preprocessor">#pragma omp parallel for shared(max_len, max_len_num) schedule(guided)</span></div>
|
|
<div class="line"><span class="lineno"> 59</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><span class="lineno"> 60</span> <span class="keywordflow">for</span> (i = 1; i < MAX_NUM; i++)</div>
|
|
<div class="line"><span class="lineno"> 61</span> {</div>
|
|
<div class="line"><span class="lineno"> 62</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code hl_struct" href="../../df/db3/struct_l.html">L</a> = <a class="code hl_function" href="../../d4/dea/problem__14_2sol1_8c.html#a81c1df5c17cb16bcc16e346fcff6fa80">collatz</a>(i);</div>
|
|
<div class="line"><span class="lineno"> 63</span> <span class="keywordflow">if</span> (<a class="code hl_struct" href="../../df/db3/struct_l.html">L</a> > max_len)</div>
|
|
<div class="line"><span class="lineno"> 64</span> {</div>
|
|
<div class="line"><span class="lineno"> 65</span> max_len = <a class="code hl_struct" href="../../df/db3/struct_l.html">L</a>; <span class="comment">/* length of sequence */</span></div>
|
|
<div class="line"><span class="lineno"> 66</span> max_len_num = i; <span class="comment">/* starting number */</span></div>
|
|
<div class="line"><span class="lineno"> 67</span> }</div>
|
|
<div class="line"><span class="lineno"> 68</span> </div>
|
|
<div class="line"><span class="lineno"> 69</span><span class="preprocessor">#if defined(_OPENMP) && defined(DEBUG)</span></div>
|
|
<div class="line"><span class="lineno"> 70</span> printf(<span class="stringliteral">"Thread: %2d\t %3lld: \t%5lld\n"</span>, omp_get_thread_num(), i, <a class="code hl_struct" href="../../df/db3/struct_l.html">L</a>);</div>
|
|
<div class="line"><span class="lineno"> 71</span><span class="preprocessor">#elif defined(DEBUG)</span></div>
|
|
<div class="line"><span class="lineno"> 72</span> printf(<span class="stringliteral">"%3lld: \t%5lld\n"</span>, i, <a class="code hl_struct" href="../../df/db3/struct_l.html">L</a>);</div>
|
|
<div class="line"><span class="lineno"> 73</span><span class="preprocessor">#endif</span></div>
|
|
<div class="line"><span class="lineno"> 74</span> }</div>
|
|
<div class="line"><span class="lineno"> 75</span> </div>
|
|
<div class="line"><span class="lineno"> 76</span> printf(<span class="stringliteral">"Start: %3lld: \tLength: %5lld\n"</span>, max_len_num, max_len);</div>
|
|
<div class="line"><span class="lineno"> 77</span> </div>
|
|
<div class="line"><span class="lineno"> 78</span> <span class="keywordflow">return</span> 0;</div>
|
|
<div class="line"><span class="lineno"> 79</span>}</div>
|
|
<div class="ttc" id="aproblem__14_2sol1_8c_html_a81c1df5c17cb16bcc16e346fcff6fa80"><div class="ttname"><a href="../../d4/dea/problem__14_2sol1_8c.html#a81c1df5c17cb16bcc16e346fcff6fa80">collatz</a></div><div class="ttdeci">long long collatz(long long start_num)</div><div class="ttdoc">Computes the length of collatz sequence for a given starting number.</div><div class="ttdef"><b>Definition:</b> sol1.c:27</div></div>
|
|
<div class="ttc" id="astruct_l_html"><div class="ttname"><a href="../../df/db3/struct_l.html">L</a></div><div class="ttdef"><b>Definition:</b> list.h:8</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="../../d4/dea/problem__14_2sol1_8c_a3c04138a5bfe5d72780bb7e82a18e627_cgraph.svg" width="170" height="36"><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_b3d331eabd4234f247030c297aaf021c.html">project_euler</a></li><li class="navelem"><a class="el" href="../../dir_aba97bf327db94061e830e9bc18e925d.html">problem_14</a></li><li class="navelem"><a class="el" href="../../d4/dea/problem__14_2sol1_8c.html">sol1.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.5 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|