solution 5
							parent
							
								
									c1dfb112db
								
							
						
					
					
						commit
						727c36e795
					
				|  | @ -0,0 +1,8 @@ | ||||||
|  | pub fn gcd(mut a: u64, mut b: u64) -> u64 { | ||||||
|  |     while b != 0 { | ||||||
|  |         let t = a; | ||||||
|  |         a = b; | ||||||
|  |         b = t % b; | ||||||
|  |     } | ||||||
|  |     a | ||||||
|  | } | ||||||
|  | @ -1,6 +1,8 @@ | ||||||
| pub mod prime; | pub mod prime; | ||||||
|  | pub mod math; | ||||||
| 
 | 
 | ||||||
| pub mod problem_001; | pub mod problem_001; | ||||||
| pub mod problem_002; | pub mod problem_002; | ||||||
| pub mod problem_003; | pub mod problem_003; | ||||||
| pub mod problem_004; | pub mod problem_004; | ||||||
|  | pub mod problem_005; | ||||||
|  | @ -14,7 +14,8 @@ fn subfactors(mut n: u64, p: u64) -> (u64, Vec<u64>) { | ||||||
|     (n, subfactors) |     (n, subfactors) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub fn trial_factorization(mut n: u64) -> Vec<u64> { | pub fn trial_factorization(n: u64) -> Vec<u64> { | ||||||
|  |     let mut n = n; | ||||||
|     let mut factors = Vec::new(); |     let mut factors = Vec::new(); | ||||||
| 
 | 
 | ||||||
|     let (num, division_by_two) = subfactors(n, 2); |     let (num, division_by_two) = subfactors(n, 2); | ||||||
|  | @ -42,6 +43,24 @@ pub fn trial_factorization(mut n: u64) -> Vec<u64> { | ||||||
|     factors |     factors | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | fn root(n: u64, f: u64) -> u64 { | ||||||
|  |     let mut n = n; | ||||||
|  |     let mut result = 0; | ||||||
|  | 
 | ||||||
|  |     while n % f == 0 { | ||||||
|  |         result += 1; | ||||||
|  |         n /= f; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     result | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | pub fn prime_factorization(n: u64) -> Vec<(u64, u64)> { | ||||||
|  |     let factors = trial_factorization(n); | ||||||
|  |     let exponents = factors.iter().map( |&f| root(n, f) ); | ||||||
|  |     factors.iter().zip(exponents).map( |(&i, j)| (i, j) ).collect() | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #[cfg(test)] | #[cfg(test)] | ||||||
| mod tests { | mod tests { | ||||||
|     use euler::prime::trial_factorization; |     use euler::prime::trial_factorization; | ||||||
|  |  | ||||||
|  | @ -0,0 +1,21 @@ | ||||||
|  | use euler::math; | ||||||
|  | 
 | ||||||
|  | fn smallest_divisible_by_all_up_to(n: u64) -> u64 { | ||||||
|  |     (2..n).fold(1, |acc, i| { | ||||||
|  |         acc * i / math::gcd(i, acc) | ||||||
|  |     }) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | pub fn solution() -> u64 { | ||||||
|  |     smallest_divisible_by_all_up_to(20) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[cfg(test)] | ||||||
|  | mod tests { | ||||||
|  |     use euler::problem_005::solution; | ||||||
|  | 
 | ||||||
|  |     #[test] | ||||||
|  |     fn problem_005() { | ||||||
|  |         assert_eq!(solution(), 232_792_560); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue