feat(maths::solver): prime opti

This commit is contained in:
gbrochar 2023-08-23 15:18:53 +02:00
parent 75c1d0712b
commit 4ba6a65a71
1 changed files with 10 additions and 10 deletions

View File

@ -46,7 +46,7 @@ fn simplify_sqrt(mut n: i128) -> (i128, i128) {
let mut prime_factors = vec![]; let mut prime_factors = vec![];
let mut prime = 3; let mut prime = 3;
println!("stuck {n}"); println!("stuck {n}");
while n != 1 { while n != 1 && prime * prime < n {
if n % (prime - 1) == 0 { if n % (prime - 1) == 0 {
println!("stuck {n} {}", prime - 1); println!("stuck {n} {}", prime - 1);
prime_factors.push(prime - 1); prime_factors.push(prime - 1);
@ -170,7 +170,7 @@ fn get_strings(left_part: Rational, sqrt_delta: MySqrt) -> (String, String, Stri
string_b = format!("{} + {string}", -a); string_b = format!("{} + {string}", -a);
} }
let len = std::cmp::max(string_a.len(), format!("{d}").len()) + 2; let len = std::cmp::max(string_a.len(), format!("{d}").len()) + 2;
let len_b = std::cmp::max(string_b.len(), format!("{d}").len()) + 2; let len_b = std::cmp::max(string_b.len(), format!("{d}").len()) + 2;
@ -238,7 +238,7 @@ fn degree_two_complex(a: GaussianRational, b: GaussianRational, c: GaussianRatio
2362 / 473 + sqrt(7896511271) \ 49 / -473 + sqrt(7896511271) \ 2362 / 473 + sqrt(7896511271) \ 49 / -473 + sqrt(7896511271) \
---- + sqrt | ------------------------ | + -- i sign sqrt | ------------------------- | i ---- + sqrt | ------------------------ | + -- i sign sqrt | ------------------------- | i
32 \ 45150 / 13 \ 45150 / 32 \ 45150 / 13 \ 45150 /
*/ */
@ -299,7 +299,7 @@ fn degree_two_complex(a: GaussianRational, b: GaussianRational, c: GaussianRatio
let string2 = format!("{} + sqrt | {s2} | + {} i {sign} sqrt | {s5} | i", "-".repeat(b_real_len), "-".repeat(b_imag_len)); let string2 = format!("{} + sqrt | {s2} | + {} i {sign} sqrt | {s5} | i", "-".repeat(b_real_len), "-".repeat(b_imag_len));
let string3 = format!("{}{}{} \\ {s3} / {}{}{} \\ {s6} / ", " ".repeat(space3 / 2), b.real.denominator, " ".repeat(space3 / 2 + space3 % 2), " ".repeat(space4 / 2), b.imaginary.denominator, " ".repeat(space4 / 2 + space4 % 2)); let string3 = format!("{}{}{} \\ {s3} / {}{}{} \\ {s6} / ", " ".repeat(space3 / 2), b.real.denominator, " ".repeat(space3 / 2 + space3 % 2), " ".repeat(space4 / 2), b.imaginary.denominator, " ".repeat(space4 / 2 + space4 % 2));
*/ */
println!("{string1}"); println!("{string1}");
println!("{string2}"); println!("{string2}");
println!("{string3}"); println!("{string3}");
@ -362,7 +362,7 @@ fn print_degree_two_real(left_part: Rational, sqrt_delta: MySqrt, imaginary: boo
} }
} }
let len = std::cmp::max(string.chars().count(), format!("{d}").len()) + 2; let len = std::cmp::max(string.chars().count(), format!("{d}").len()) + 2;
println!("{a} {b} {c} {d}"); println!("{a} {b} {c} {d}");
@ -400,7 +400,7 @@ fn degree_two_real(a: Rational, b: Rational, c: Rational) {
} }
let mut sqrt_delta = sqrt(delta, a); let mut sqrt_delta = sqrt(delta, a);
let mut left_part = (-1 * b) / (2 * a); let mut left_part = (-1 * b) / (2 * a);
let tmp = left_part.denominator; let tmp = left_part.denominator;
left_part.denominator *= sqrt_delta.denominator; left_part.denominator *= sqrt_delta.denominator;
@ -455,19 +455,19 @@ pub fn solve(mut equation: Vec<GaussianRational>) -> Vec<GaussianRational> {
2362 / 473 + sqrt(7896511271) \ 49 / -473 + sqrt(7896511271) \ 2362 / 473 + sqrt(7896511271) \ 49 / -473 + sqrt(7896511271) \
---- + sqrt | ------------------------ | + -- i sign sqrt | ------------------------- | i ---- + sqrt | ------------------------ | + -- i sign sqrt | ------------------------- | i
32 \ 45150 / 13 \ 45150 / 32 \ 45150 / 13 \ 45150 /
*/ */
/* /*
/ /
sqrt | sqrt |
\ \
/ 473 + sqrt(7896511271) \ / -473 + sqrt(7896511271) \ / 473 + sqrt(7896511271) \ / -473 + sqrt(7896511271) \
2362 + 37 * sqrt | ------------------------ | + 46 * sqrt | ------------------------- | 2362 + 37 * sqrt | ------------------------ | + 46 * sqrt | ------------------------- |
\ 45150 / \ 45150 / \ 45150 / \ 45150 /
--------------------------------------------------------------------------------------------- + --------------------------------------------------------------------------------------------- +
@ -480,4 +480,4 @@ sqrt |
--------------------------------------------------------------------------------------------- i --------------------------------------------------------------------------------------------- i
21615671563 21615671563
*/ */