public static LongInteger MultiplicationLongInteger(LongInteger v1, LongInteger v2) { if (v1.Values.Count < v2.Values.Count) { MultiplicationLongInteger(v2, v1); } if (v1.Equals("0") || v2.Equals("0")) { return(LongInteger.Parse("0")); } var multResult = LongInteger.Parse("0"); var j = v2.Values.Count - 1; var n = 0; while (j >= 0) { var result = Module(v1.Clone()); var i = v1.Values.Count - 1; var hold = 0; while (i >= 0) { var res = v1.Values[i] * v2.Values[j] + hold; hold = res / Constants.Radix; result.Values[i] = res % Constants.Radix; i--; } if (hold != 0) { result.Values.Insert(0, hold); } for (var k = 0; k < n; k++) { result.Values.Add(0); } multResult = SumLongInteger(multResult, result); j--; n++; } multResult.Negative = v1.Negative != v2.Negative; multResult.Normalize(); return(multResult); }