private void DoFactorize(PrimesBigInteger value) { /* * if (N.compareTo(ONE) == 0) return; * if (N.isProbablePrime(20)) { System.out.println(N); return; } * BigInteger divisor = rho(N); * factor(divisor); * factor(N.divide(divisor)); */ if (value.Equals(PrimesBigInteger.One)) { return; } if (value.IsProbablePrime(10)) { if (!m_Factors.ContainsKey(value)) { m_Factors.Add(value, PrimesBigInteger.Zero); } PrimesBigInteger tmp = m_Factors[value]; m_Factors[value] = tmp.Add(PrimesBigInteger.One); if (FoundFactor != null) { FoundFactor(m_Factors.GetEnumerator()); } log.Info(value.ToString()); return; } else { if (!m_FactorsTmp.ContainsKey(value)) { m_FactorsTmp.Add(value, 0); } m_FactorsTmp[value]++; if (m_FactorsTmp[value] > 3) { log.Info(value.ToString() + " Zu oft"); m_A = PrimesBigInteger.RandomM(value).Add(PrimesBigInteger.Two); m_FactorsTmp.Remove(value); } } PrimesBigInteger div = CalculateFactor(value); DoFactorize(div); DoFactorize(value.Divide(div)); }