using System;
using System.Diagnostics;
public class Test
{
public static long Euclid(long big, long small)
{
long mod = 0;
while ((mod = big % small) != 0)
{
big = small;
small = mod;
}
return small;
}
public static long GCD(long left, long right) {
if (left > right) {
return Euclid(left, right);
}
return Euclid (right, left);
}
public static long DZMin(int limit)
{
long multiple = limit;
for (int m = limit - 1; m > 1; m--) {
long prod = m * multiple;
multiple = prod / GCD(multiple, m);
Console.WriteLine("Multiple {0} product to {1} multiple {2}", m, prod, multiple);
}
return multiple;
}
public static int MinMultiples(int from)
{
int multiple = from;
for (int m = from - 1; m > 1; m--)
{
int extend = multiple;
Console.WriteLine("Multiple {0} extending by {1}", m, extend);
while ((multiple % m) != 0)
{
multiple += extend;
}
}
return multiple;
}
public static void Main()
{
Stopwatch s = new Stopwatch();
s.Start();
Console.WriteLine("Result {0}", MinMultiples(20));
s.Stop();
Console.WriteLine("The time took is {0} milliseconds.", s.ElapsedMilliseconds);
s.Reset();
s.Start();
Console.WriteLine("Result {0}", DZMin(20));
s.Stop();
Console.WriteLine("The time took is {0} milliseconds.", s.ElapsedMilliseconds);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIGxvbmcgRXVjbGlkKGxvbmcgYmlnLCBsb25nIHNtYWxsKQoJewoJCWxvbmcgbW9kID0gMDsKCQl3aGlsZSAoKG1vZCA9IGJpZyAlIHNtYWxsKSAhPSAwKQoJCXsKCQkJYmlnID0gc21hbGw7CgkJCXNtYWxsID0gbW9kOwoJCX0KCQlyZXR1cm4gc21hbGw7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgbG9uZyBHQ0QobG9uZyBsZWZ0LCBsb25nIHJpZ2h0KSB7CgkJaWYgKGxlZnQgPiByaWdodCkgewoJCSAgICByZXR1cm4gRXVjbGlkKGxlZnQsIHJpZ2h0KTsKCQl9CgkJcmV0dXJuIEV1Y2xpZCAocmlnaHQsIGxlZnQpOwoJfQoJCglwdWJsaWMgc3RhdGljIGxvbmcgRFpNaW4oaW50IGxpbWl0KQoJewoJCWxvbmcgbXVsdGlwbGUgPSBsaW1pdDsKCQlmb3IgKGludCBtID0gbGltaXQgLSAxOyBtID4gMTsgbS0tKSB7CgkJCWxvbmcgcHJvZCA9IG0gKiBtdWx0aXBsZTsKCQkJbXVsdGlwbGUgPSBwcm9kIC8gR0NEKG11bHRpcGxlLCBtKTsKCQkJQ29uc29sZS5Xcml0ZUxpbmUoIk11bHRpcGxlIHswfSBwcm9kdWN0IHRvIHsxfSBtdWx0aXBsZSB7Mn0iLCBtLCBwcm9kLCBtdWx0aXBsZSk7CgoJCX0KCQlyZXR1cm4gbXVsdGlwbGU7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgaW50IE1pbk11bHRpcGxlcyhpbnQgZnJvbSkKCXsKCQlpbnQgbXVsdGlwbGUgPSBmcm9tOwoJCWZvciAoaW50IG0gPSBmcm9tIC0gMTsgbSA+IDE7IG0tLSkKCQl7CgkJCWludCBleHRlbmQgPSBtdWx0aXBsZTsKCQkJQ29uc29sZS5Xcml0ZUxpbmUoIk11bHRpcGxlIHswfSBleHRlbmRpbmcgYnkgezF9IiwgbSwgZXh0ZW5kKTsKCQkJd2hpbGUgKChtdWx0aXBsZSAlIG0pICE9IDApCgkJCXsKCQkJCW11bHRpcGxlICs9IGV4dGVuZDsKCQkJfQoJCX0KCQlyZXR1cm4gbXVsdGlwbGU7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlTdG9wd2F0Y2ggcyA9IG5ldyBTdG9wd2F0Y2goKTsKCQlzLlN0YXJ0KCk7CgoJCUNvbnNvbGUuV3JpdGVMaW5lKCJSZXN1bHQgezB9IiwgTWluTXVsdGlwbGVzKDIwKSk7CgkJCgkJcy5TdG9wKCk7CgkJCgkJQ29uc29sZS5Xcml0ZUxpbmUoIlRoZSB0aW1lIHRvb2sgaXMgezB9IG1pbGxpc2Vjb25kcy4iLCBzLkVsYXBzZWRNaWxsaXNlY29uZHMpOwoJCQoJCXMuUmVzZXQoKTsKCQkKCQlzLlN0YXJ0KCk7CgoJCUNvbnNvbGUuV3JpdGVMaW5lKCJSZXN1bHQgezB9IiwgRFpNaW4oMjApKTsKCQkKCQlzLlN0b3AoKTsKCQkKCQlDb25zb2xlLldyaXRlTGluZSgiVGhlIHRpbWUgdG9vayBpcyB7MH0gbWlsbGlzZWNvbmRzLiIsIHMuRWxhcHNlZE1pbGxpc2Vjb25kcyk7CgkJCgl9Cn0=