internal EquationParts( QuadResWorkerInfo UseWInfo, BackgroundWorker UseWorker ) { WInfo = UseWInfo; Worker = UseWorker; IntMath = new IntegerMath(); Quotient = new Integer(); Remainder = new Integer(); Product = new Integer(); SolutionP = new Integer(); SolutionQ = new Integer(); ProductSqrRoot = new Integer(); MaxX = new Integer(); FindFactors1 = new FindFactors( Worker, IntMath ); IntMath.SetFromString( Product, WInfo.PublicKeyModulus ); }
private bool IsSolution( Integer X, Integer Y ) { Worker.ReportProgress( 0, " " ); Worker.ReportProgress( 0, "Top of IsSolution()." ); FindFactors FindF = new FindFactors( Worker, IntMath ); FindF.FindSmallPrimeFactorsOnly( Y ); FindF.ShowAllFactors(); SolutionP.Copy( Y ); IntMath.Subtract( SolutionP, X ); // Make Q the bigger one and put them in order. SolutionQ.Copy( Y ); SolutionQ.Add( X ); if( SolutionP.IsOne() ) { Worker.ReportProgress( 0, " " ); Worker.ReportProgress( 0, "Went all the way to 1 without finding a factor." ); SolutionP.SetToZero(); // It has no factors. SolutionQ.SetToZero(); throw( new Exception( "Went all the way to 1 without finding a factor." )); // return false; } Worker.ReportProgress( 0, "Found P: " + IntMath.ToString10( SolutionP ) ); Worker.ReportProgress( 0, "Found Q: " + IntMath.ToString10( SolutionQ ) ); Worker.ReportProgress( 0, "Seconds: " + StartTime.GetSecondsToNow().ToString( "N1" )); double Seconds = StartTime.GetSecondsToNow(); int Minutes = (int)Seconds / 60; int Hours = Minutes / 60; Minutes = Minutes % 60; Seconds = Seconds % 60; string ShowS = "Hours: " + Hours.ToString( "N0" ) + " Minutes: " + Minutes.ToString( "N0" ) + " Seconds: " + Seconds.ToString( "N0" ); Worker.ReportProgress( 0, ShowS ); Worker.ReportProgress( 0, " " ); return true; // With P and Q. }