using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; //输出结果: //1-20之间最小的公倍数是:232792560 //所花费的时间为:00:00:00.0020407 //2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. //What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20? //求1-20最小公倍数 //解决方案:把1-20放进数组,逐一判断,如果是素数保留,如果不是,用这个数除以前面数列中的数字 //把整除留下的数字放回到该数组中,最后乘积。 namespace Problem5 { class Program { static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start(); int index = 20; long res = 1; int[] sum = new int[index]; //赋初始值 for (int i = 0; i < index; i++) { sum[i] = i + 1; } for (int i = 0; i < index; i++) { if (IsPrime(sum[i])) { continue; } for (int j = 1; j < i; j++) { if (sum[i] % sum[j] == 0) { sum[i] = sum[i] / sum[j]; } } } for (int i = 0; i < index; i++) { res *= sum[i]; } Console.WriteLine("1-{0}之间最小的公倍数是:{1}", index, res); sw.Stop(); Console.WriteLine("所花费的时间为:{0}", sw.Elapsed); } //判断是否为素数 public static bool IsPrime(int i) { for (int j = 2; j < i; j++) { if (i % j == 0) { return false; } } return true; } } }