diff options
author | lloyd <[email protected]> | 2006-07-16 10:39:59 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2006-07-16 10:39:59 +0000 |
commit | 311b29d8115df01b4a7aa3d1207af3ae67afa7d1 (patch) | |
tree | 8c105219d5b00cae10091c63cd78ee4ebd084ad6 /doc/examples/factor.cpp | |
parent | 4232268d52018e14b9f32e0a3e3e9d657a0f8703 (diff) |
Have to (potentially) factor the result from the Rho computation, as it
might be composite.
Diffstat (limited to 'doc/examples/factor.cpp')
-rw-r--r-- | doc/examples/factor.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/doc/examples/factor.cpp b/doc/examples/factor.cpp index 93a7a0e9e..163d83fe0 100644 --- a/doc/examples/factor.cpp +++ b/doc/examples/factor.cpp @@ -85,7 +85,7 @@ std::vector<BigInt> remove_small_factors(BigInt& n) std::vector<BigInt> factorize(const BigInt& n_in) { - BigInt n = n_in, a_factor = 0; + BigInt n = n_in; std::vector<BigInt> factors = remove_small_factors(n); while(n != 1) @@ -96,11 +96,14 @@ std::vector<BigInt> factorize(const BigInt& n_in) break; } - do + BigInt a_factor = 0; + while(a_factor == 0) a_factor = rho(n); - while(a_factor == 0); - factors.push_back(a_factor); + std::vector<BigInt> rho_factored = factorize(a_factor); + for(u32bit j = 0; j != rho_factored.size(); j++) + factors.push_back(rho_factored[j]); + n /= a_factor; } return factors; |