File tree 12 files changed +173
-0
lines changed
12 files changed +173
-0
lines changed Original file line number Diff line number Diff line change
1
+ /target
Original file line number Diff line number Diff line change
1
+ [package ]
2
+ name = " project_euler"
3
+ version = " 0.1.0"
4
+ edition = " 2021"
5
+
6
+ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7
+
8
+ [dependencies ]
Original file line number Diff line number Diff line change
1
+ fn main ( ) {
2
+ let mut result = 0 ;
3
+ for i in 1 ..1000 {
4
+ if i % 3 == 0 || i % 5 == 0 {
5
+ result += i;
6
+ }
7
+ }
8
+ println ! ( "{}" , result) ;
9
+ }
Original file line number Diff line number Diff line change
1
+ fn main ( ) {
2
+ let mut result = 0 ;
3
+ let mut a = 1 ;
4
+ let mut b = 2 ;
5
+ while b <= 4_000_000 {
6
+ if b % 2 == 0 {
7
+ result += b;
8
+ }
9
+ let c = a + b;
10
+ a = b;
11
+ b = c;
12
+ }
13
+ println ! ( "{}" , result) ;
14
+ }
Original file line number Diff line number Diff line change
1
+ use project_euler:: * ;
2
+
3
+ fn main ( ) {
4
+ let mut n = 600851475143 ;
5
+ let mut factor = get_smallest_prime_factor ( n) ;
6
+ while factor != n {
7
+ n /= factor;
8
+ factor = get_smallest_prime_factor ( n) ;
9
+ }
10
+ println ! ( "{}" , factor) ;
11
+ }
Original file line number Diff line number Diff line change
1
+ use project_euler:: * ;
2
+
3
+ fn main ( ) {
4
+ let mut result = 0 ;
5
+ for i in 100 ..1000 {
6
+ for j in i..1000 {
7
+ let product = i * j;
8
+ if is_palindromic ( product) {
9
+ result = result. max ( product) ;
10
+ }
11
+ }
12
+ }
13
+ println ! ( "{}" , result) ;
14
+ }
Original file line number Diff line number Diff line change
1
+ fn main ( ) {
2
+ let mut nums: Vec < _ > = ( 2 ..21 ) . collect ( ) ;
3
+ let mut result = 1 ;
4
+ let mut index = 0 ;
5
+ while index < nums. len ( ) {
6
+ let num = nums[ index] ;
7
+ result *= num;
8
+ index += 1 ;
9
+ for n in & mut nums[ index..] {
10
+ if * n % num == 0 {
11
+ * n /= num;
12
+ }
13
+ }
14
+ }
15
+ println ! ( "{}" , result) ;
16
+ }
Original file line number Diff line number Diff line change
1
+ fn main ( ) {
2
+ let mut sum = 0 ;
3
+ let mut square_sum = 0 ;
4
+ for n in 1 ..=100 {
5
+ sum += n;
6
+ square_sum += n * n;
7
+ }
8
+ println ! ( "{}" , sum * sum - square_sum) ;
9
+ }
Original file line number Diff line number Diff line change
1
+ use project_euler:: * ;
2
+
3
+ fn main ( ) {
4
+ let mut n = 2 ;
5
+ let mut count = 0 ;
6
+ while count < 10_001 {
7
+ if is_prime ( n) {
8
+ println ! ( "{}" , n) ;
9
+ count += 1 ;
10
+ }
11
+ n += 1 ;
12
+ }
13
+ println ! ( "{}" , n - 1 ) ;
14
+ }
Original file line number Diff line number Diff line change
1
+ const LEN : usize = 13 ;
2
+
3
+ fn find_nonzero_product ( seq : & [ u8 ] , index : usize ) -> ( u64 , usize ) {
4
+ let mut result = 1u64 ;
5
+ if index + LEN >= seq. len ( ) {
6
+ return ( 0 , seq. len ( ) ) ;
7
+ }
8
+ for i in index..( index + LEN ) {
9
+ let n = seq[ i] ;
10
+ if n == b'0' {
11
+ return find_nonzero_product ( seq, i + 1 ) ;
12
+ }
13
+ result *= ( n - b'0' ) as u64
14
+ }
15
+ ( result, index + LEN )
16
+ }
17
+
18
+ fn main ( ) {
19
+ let seq = b"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450" ;
20
+ let ( mut current, mut index) = find_nonzero_product ( seq, 0 ) ;
21
+ let mut result = current;
22
+ while index < seq. len ( ) {
23
+ if seq[ index] == b'0' {
24
+ let product = find_nonzero_product ( seq, index + 1 ) ;
25
+ current = product. 0 ;
26
+ index = product. 1 ;
27
+ } else {
28
+ current /= ( seq[ index - LEN ] - b'0' ) as u64 ;
29
+ current *= ( seq[ index] - b'0' ) as u64 ;
30
+ index += 1 ;
31
+ }
32
+ result = result. max ( current) ;
33
+ }
34
+ println ! ( "{}" , result) ;
35
+ }
Original file line number Diff line number Diff line change
1
+ pub fn get_smallest_prime_factor ( n : u64 ) -> u64 {
2
+ for i in 2 ..=( n / 2 ) {
3
+ if n % i == 0 {
4
+ return i;
5
+ }
6
+ }
7
+ n
8
+ }
9
+
10
+ pub fn is_prime ( n : u64 ) -> bool {
11
+ get_smallest_prime_factor ( n) == n
12
+ }
13
+
14
+ pub fn is_palindromic ( n : u64 ) -> bool {
15
+ is_palindromic_chars ( number_to_reverse_chars ( n) )
16
+ }
17
+
18
+ pub fn number_to_reverse_chars ( mut n : u64 ) -> Vec < u8 > {
19
+ let mut result = vec ! [ ] ;
20
+ while n > 0 {
21
+ result. push ( ( n % 10 ) as u8 ) ;
22
+ n /= 10 ;
23
+ }
24
+ result
25
+ }
26
+
27
+ pub fn is_palindromic_chars ( chars : Vec < u8 > ) -> bool {
28
+ let end = chars. len ( ) / 2 + 1 ;
29
+ for i in 0 ..end {
30
+ if chars[ i] != chars[ chars. len ( ) - i - 1 ] {
31
+ return false ;
32
+ }
33
+ }
34
+ true
35
+ }
You can’t perform that action at this time.
0 commit comments