mirror of
https://github.com/rzmk/ladderz.git
synced 2025-12-26 02:57:00 +00:00
deploy: 2ec77987ef
This commit is contained in:
parent
7dba531bf7
commit
ce80fd62b7
9 changed files with 259 additions and 5 deletions
|
|
@ -276,7 +276,112 @@
|
|||
<a href="#276" id="276">276</a>
|
||||
<a href="#277" id="277">277</a>
|
||||
<a href="#278" id="278">278</a>
|
||||
</pre></div><pre class="rust"><code><span class="kw">use </span>std::collections::HashSet;
|
||||
<a href="#279" id="279">279</a>
|
||||
<a href="#280" id="280">280</a>
|
||||
<a href="#281" id="281">281</a>
|
||||
<a href="#282" id="282">282</a>
|
||||
<a href="#283" id="283">283</a>
|
||||
<a href="#284" id="284">284</a>
|
||||
<a href="#285" id="285">285</a>
|
||||
<a href="#286" id="286">286</a>
|
||||
<a href="#287" id="287">287</a>
|
||||
<a href="#288" id="288">288</a>
|
||||
<a href="#289" id="289">289</a>
|
||||
<a href="#290" id="290">290</a>
|
||||
<a href="#291" id="291">291</a>
|
||||
<a href="#292" id="292">292</a>
|
||||
<a href="#293" id="293">293</a>
|
||||
<a href="#294" id="294">294</a>
|
||||
<a href="#295" id="295">295</a>
|
||||
<a href="#296" id="296">296</a>
|
||||
<a href="#297" id="297">297</a>
|
||||
<a href="#298" id="298">298</a>
|
||||
<a href="#299" id="299">299</a>
|
||||
<a href="#300" id="300">300</a>
|
||||
<a href="#301" id="301">301</a>
|
||||
<a href="#302" id="302">302</a>
|
||||
<a href="#303" id="303">303</a>
|
||||
<a href="#304" id="304">304</a>
|
||||
<a href="#305" id="305">305</a>
|
||||
<a href="#306" id="306">306</a>
|
||||
<a href="#307" id="307">307</a>
|
||||
<a href="#308" id="308">308</a>
|
||||
<a href="#309" id="309">309</a>
|
||||
<a href="#310" id="310">310</a>
|
||||
<a href="#311" id="311">311</a>
|
||||
<a href="#312" id="312">312</a>
|
||||
<a href="#313" id="313">313</a>
|
||||
<a href="#314" id="314">314</a>
|
||||
<a href="#315" id="315">315</a>
|
||||
<a href="#316" id="316">316</a>
|
||||
<a href="#317" id="317">317</a>
|
||||
<a href="#318" id="318">318</a>
|
||||
<a href="#319" id="319">319</a>
|
||||
<a href="#320" id="320">320</a>
|
||||
<a href="#321" id="321">321</a>
|
||||
<a href="#322" id="322">322</a>
|
||||
<a href="#323" id="323">323</a>
|
||||
<a href="#324" id="324">324</a>
|
||||
<a href="#325" id="325">325</a>
|
||||
<a href="#326" id="326">326</a>
|
||||
<a href="#327" id="327">327</a>
|
||||
<a href="#328" id="328">328</a>
|
||||
<a href="#329" id="329">329</a>
|
||||
<a href="#330" id="330">330</a>
|
||||
<a href="#331" id="331">331</a>
|
||||
<a href="#332" id="332">332</a>
|
||||
<a href="#333" id="333">333</a>
|
||||
<a href="#334" id="334">334</a>
|
||||
<a href="#335" id="335">335</a>
|
||||
<a href="#336" id="336">336</a>
|
||||
<a href="#337" id="337">337</a>
|
||||
<a href="#338" id="338">338</a>
|
||||
<a href="#339" id="339">339</a>
|
||||
<a href="#340" id="340">340</a>
|
||||
<a href="#341" id="341">341</a>
|
||||
<a href="#342" id="342">342</a>
|
||||
<a href="#343" id="343">343</a>
|
||||
<a href="#344" id="344">344</a>
|
||||
<a href="#345" id="345">345</a>
|
||||
<a href="#346" id="346">346</a>
|
||||
<a href="#347" id="347">347</a>
|
||||
<a href="#348" id="348">348</a>
|
||||
<a href="#349" id="349">349</a>
|
||||
<a href="#350" id="350">350</a>
|
||||
<a href="#351" id="351">351</a>
|
||||
<a href="#352" id="352">352</a>
|
||||
<a href="#353" id="353">353</a>
|
||||
<a href="#354" id="354">354</a>
|
||||
<a href="#355" id="355">355</a>
|
||||
<a href="#356" id="356">356</a>
|
||||
<a href="#357" id="357">357</a>
|
||||
<a href="#358" id="358">358</a>
|
||||
<a href="#359" id="359">359</a>
|
||||
<a href="#360" id="360">360</a>
|
||||
<a href="#361" id="361">361</a>
|
||||
<a href="#362" id="362">362</a>
|
||||
<a href="#363" id="363">363</a>
|
||||
<a href="#364" id="364">364</a>
|
||||
<a href="#365" id="365">365</a>
|
||||
<a href="#366" id="366">366</a>
|
||||
<a href="#367" id="367">367</a>
|
||||
<a href="#368" id="368">368</a>
|
||||
<a href="#369" id="369">369</a>
|
||||
<a href="#370" id="370">370</a>
|
||||
<a href="#371" id="371">371</a>
|
||||
<a href="#372" id="372">372</a>
|
||||
<a href="#373" id="373">373</a>
|
||||
<a href="#374" id="374">374</a>
|
||||
<a href="#375" id="375">375</a>
|
||||
<a href="#376" id="376">376</a>
|
||||
<a href="#377" id="377">377</a>
|
||||
<a href="#378" id="378">378</a>
|
||||
<a href="#379" id="379">379</a>
|
||||
<a href="#380" id="380">380</a>
|
||||
<a href="#381" id="381">381</a>
|
||||
<a href="#382" id="382">382</a>
|
||||
<a href="#383" id="383">383</a>
|
||||
</pre></div><pre class="rust"><code><span class="kw">use </span>std::collections::{HashMap, HashSet};
|
||||
|
||||
<span class="doccomment">/// Finds all factor pairs for a positive integer `n`.
|
||||
///
|
||||
|
|
@ -470,6 +575,68 @@
|
|||
<span class="bool-val">false
|
||||
</span>}
|
||||
|
||||
<span class="doccomment">/// Write a program that finds all prime numbers of a positive integer `n` in the range [start, n].
|
||||
///
|
||||
/// A prime number is a positive integer greater than 1 that is
|
||||
/// not evenly divisible by any positive integer other than 1 and itself.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```rust
|
||||
/// use ladderz::pre_algebra::get_primes_in_range;
|
||||
/// use std::collections::HashSet;
|
||||
///
|
||||
/// let result: HashSet<u32> = get_primes_in_range(2, 10);
|
||||
/// let expected: HashSet<u32> = [2, 3, 5, 7].into();
|
||||
/// assert_eq!(result, expected);
|
||||
/// ```
|
||||
</span><span class="kw">pub fn </span>get_primes_in_range(start: u32, n: u32) -> HashSet<u32> {
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>primes: HashSet<u32> = HashSet::new();
|
||||
|
||||
<span class="kw">for </span>num <span class="kw">in </span>start..n + <span class="number">1 </span>{
|
||||
<span class="kw">if </span>is_prime(num) {
|
||||
primes.insert(num);
|
||||
}
|
||||
}
|
||||
primes
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Write a program that determines the prime factorization of a positive integer `n`.
|
||||
///
|
||||
/// For example the prime factorization of 12 is 2<sup>2</sup> * 3<sup>1</sup>, and the output is a HashMap of the form
|
||||
/// `[(2, 2), (3, 1)]` where the first element of each tuple is the prime factor and the second element is the exponent.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```rust
|
||||
/// use ladderz::pre_algebra::get_prime_factorization;
|
||||
/// use std::collections::HashMap;
|
||||
///
|
||||
/// let result: HashMap<u32, u32> = get_prime_factorization(12);
|
||||
/// let expected: HashMap<u32, u32> = [(2, 2), (3, 1)].into();
|
||||
/// assert_eq!(result, expected);
|
||||
/// ```
|
||||
</span><span class="kw">pub fn </span>get_prime_factorization(n: u32) -> HashMap<u32, u32> {
|
||||
<span class="kw">if </span>n == <span class="number">1 </span>{
|
||||
<span class="kw">return </span>HashMap::new();
|
||||
}
|
||||
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>prime_factors: HashMap<u32, u32> = HashMap::new();
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>current_num: u32 = n;
|
||||
<span class="kw">let </span>primes_of_n: HashSet<u32> = get_primes_in_range(<span class="number">2</span>, n);
|
||||
|
||||
<span class="kw">for </span>prime <span class="kw">in </span>primes_of_n {
|
||||
<span class="kw">while </span>current_num % prime == <span class="number">0 </span>{
|
||||
prime_factors
|
||||
.entry(prime)
|
||||
.and_modify(|e| <span class="kw-2">*</span>e += <span class="number">1</span>)
|
||||
.or_insert(<span class="number">1</span>);
|
||||
current_num /= prime;
|
||||
}
|
||||
}
|
||||
prime_factors
|
||||
}
|
||||
|
||||
<span class="attr">#[cfg(test)]
|
||||
</span><span class="kw">mod </span>tests {
|
||||
<span class="kw">use super</span>::<span class="kw-2">*</span>;
|
||||
|
|
@ -553,5 +720,48 @@
|
|||
<span class="macro">assert!</span>(is_composite(<span class="number">27</span>));
|
||||
<span class="macro">assert!</span>(is_composite(<span class="number">51</span>));
|
||||
}
|
||||
|
||||
<span class="attr">#[test]
|
||||
</span><span class="kw">fn </span>test_get_primes_in_range() {
|
||||
<span class="kw">let </span>result: HashSet<u32> = get_primes_in_range(<span class="number">2</span>, <span class="number">10</span>);
|
||||
<span class="kw">let </span>expected: HashSet<u32> = [<span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">7</span>].into();
|
||||
<span class="macro">assert_eq!</span>(result, expected);
|
||||
|
||||
<span class="kw">let </span>result_2: HashSet<u32> = get_primes_in_range(<span class="number">1</span>, <span class="number">10</span>);
|
||||
<span class="kw">let </span>expected_2: HashSet<u32> = [<span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">7</span>].into();
|
||||
<span class="macro">assert_eq!</span>(result_2, expected_2);
|
||||
|
||||
<span class="kw">let </span>result_3: HashSet<u32> = get_primes_in_range(<span class="number">1</span>, <span class="number">1</span>);
|
||||
<span class="kw">let </span>expected_3: HashSet<u32> = [].into();
|
||||
<span class="macro">assert_eq!</span>(result_3, expected_3);
|
||||
|
||||
<span class="kw">let </span>result_4: HashSet<u32> = get_primes_in_range(<span class="number">1</span>, <span class="number">50</span>);
|
||||
<span class="kw">let </span>expected_4: HashSet<u32> =
|
||||
[<span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">7</span>, <span class="number">11</span>, <span class="number">13</span>, <span class="number">17</span>, <span class="number">19</span>, <span class="number">23</span>, <span class="number">29</span>, <span class="number">31</span>, <span class="number">37</span>, <span class="number">41</span>, <span class="number">43</span>, <span class="number">47</span>].into();
|
||||
<span class="macro">assert_eq!</span>(result_4, expected_4);
|
||||
}
|
||||
|
||||
<span class="attr">#[test]
|
||||
</span><span class="kw">fn </span>test_get_prime_factorization() {
|
||||
<span class="kw">let </span>result: HashMap<u32, u32> = get_prime_factorization(<span class="number">1</span>);
|
||||
<span class="kw">let </span>expected: HashMap<u32, u32> = HashMap::new();
|
||||
<span class="macro">assert_eq!</span>(result, expected);
|
||||
|
||||
<span class="kw">let </span>result_2: HashMap<u32, u32> = get_prime_factorization(<span class="number">12</span>);
|
||||
<span class="kw">let </span>expected_2: HashMap<u32, u32> = [(<span class="number">2</span>, <span class="number">2</span>), (<span class="number">3</span>, <span class="number">1</span>)].into();
|
||||
<span class="macro">assert_eq!</span>(result_2, expected_2);
|
||||
|
||||
<span class="kw">let </span>result_3: HashMap<u32, u32> = get_prime_factorization(<span class="number">16</span>);
|
||||
<span class="kw">let </span>expected_3: HashMap<u32, u32> = [(<span class="number">2</span>, <span class="number">4</span>)].into();
|
||||
<span class="macro">assert_eq!</span>(result_3, expected_3);
|
||||
|
||||
<span class="kw">let </span>result_4: HashMap<u32, u32> = get_prime_factorization(<span class="number">27</span>);
|
||||
<span class="kw">let </span>expected_4: HashMap<u32, u32> = [(<span class="number">3</span>, <span class="number">3</span>)].into();
|
||||
<span class="macro">assert_eq!</span>(result_4, expected_4);
|
||||
|
||||
<span class="kw">let </span>result_5: HashMap<u32, u32> = get_prime_factorization(<span class="number">51</span>);
|
||||
<span class="kw">let </span>expected_5: HashMap<u32, u32> = [(<span class="number">3</span>, <span class="number">1</span>), (<span class="number">17</span>, <span class="number">1</span>)].into();
|
||||
<span class="macro">assert_eq!</span>(result_5, expected_5);
|
||||
}
|
||||
}
|
||||
</code></pre></div></section></main></body></html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue