Skip to content

Commit a98000b

Browse files
committed
Deploying to gh-pages from @ 1e600c2 🚀
1 parent 9e2ea2e commit a98000b

1 file changed

Lines changed: 35 additions & 1 deletion

File tree

index.html

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1797,10 +1797,44 @@ <h3 id="verify-a-prime-number">Verify a prime number?</h3>
17971797
<summary>Show Answer 💡</summary>
17981798
<br>
17991799

1800+
<p>The simplest approach is to check if the number is divisible by every integer less than itself.</p>
18001801
<pre><code class="language-javascript"><span class="hljs-keyword">const</span> isPrime = <span class="hljs-function">(<span class="hljs-params">num</span>) =&gt;</span> {
18011802
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">2</span>; i &lt; num; i++) <span class="hljs-keyword">if</span> (num % i === <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
18021803

1803-
<span class="hljs-keyword">return</span> num !== <span class="hljs-number">1</span>;
1804+
<span class="hljs-keyword">return</span> num &gt; <span class="hljs-number">1</span>;
1805+
};
1806+
</code></pre>
1807+
<p>A more efficient approach is to check if the number is divisible by every integer up to its square root.</p>
1808+
<blockquote>
1809+
<p>If <code>n = a * b</code> where <code>a &lt;= b</code>, a is always going to be less or equal to the square root of <code>n</code>. </p>
1810+
</blockquote>
1811+
<pre><code class="language-javascript"><span class="hljs-keyword">const</span> isPrime = <span class="hljs-function">(<span class="hljs-params">num</span>) =&gt;</span> {
1812+
<span class="hljs-keyword">const</span> limit = <span class="hljs-built_in">Math</span>.sqrt(num);
1813+
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">2</span>; i &lt;= limit i++) <span class="hljs-keyword">if</span> (num % i === <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
1814+
1815+
<span class="hljs-keyword">return</span> num &gt; <span class="hljs-number">1</span>;
1816+
};
1817+
</code></pre>
1818+
<p>A slightly more efficient approach is also to avoid all even numbers since they are divisible by 2; hence can&#39;t be prime.</p>
1819+
<pre><code class="language-javascript"><span class="hljs-keyword">const</span> isPrime = <span class="hljs-function">(<span class="hljs-params">num</span>) =&gt;</span> {
1820+
<span class="hljs-keyword">if</span> (num % <span class="hljs-number">2</span> === <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> num === <span class="hljs-number">2</span>;
1821+
<span class="hljs-keyword">const</span> limit = <span class="hljs-built_in">Math</span>.sqrt(num);
1822+
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">3</span>; i &lt;= limit; i+=<span class="hljs-number">2</span>)
1823+
<span class="hljs-keyword">if</span> (num % i === <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
1824+
<span class="hljs-keyword">return</span> num &gt; <span class="hljs-number">1</span>;
1825+
};
1826+
</code></pre>
1827+
<p>We can keep creating slightly more efficient versions by eliminating multiples of known primes.</p>
1828+
<blockquote>
1829+
<p>For 2 &amp; 3, it boils down to <code>6k + i</code>. We can even write more efficient versions following the same pattern <code>(p1 * p2 * ... * pn)k + i</code>.</p>
1830+
</blockquote>
1831+
<pre><code class="language-javascript"><span class="hljs-keyword">const</span> isPrime = <span class="hljs-function">(<span class="hljs-params">num</span>) =&gt;</span> {
1832+
<span class="hljs-keyword">if</span> (num % <span class="hljs-number">2</span> === <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> num === <span class="hljs-number">2</span>;
1833+
<span class="hljs-keyword">if</span> (num % <span class="hljs-number">3</span> === <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> num === <span class="hljs-number">3</span>;
1834+
<span class="hljs-keyword">const</span> limit = <span class="hljs-built_in">Math</span>.sqrt(num);
1835+
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">5</span>; i &lt;= limit; i+=<span class="hljs-number">6</span>)
1836+
<span class="hljs-keyword">if</span> (num % i === <span class="hljs-number">0</span> || num % (i + <span class="hljs-number">2</span>) === <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
1837+
<span class="hljs-keyword">return</span> num &gt; <span class="hljs-number">1</span>;
18041838
};
18051839
</code></pre>
18061840
</details>

0 commit comments

Comments
 (0)