公倍数问题! C# 实现求10、9、8、7、6、5、4、3、2的最小公倍數!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 “最小公倍数”求法http://blog.aqedu.cn/user1/evelovecj/archives/2008/32226.html int GCD(int a,int b) { int i,temp_gcd; for(i=a;i>=1;i--) { if(a%i==0) { if(b%i==0) { temp_gcd=i; return temp_gcd; }; }; }; } int LCM(int a,int b) { int temp_lcm; temp_lcm=a*b/GCD(a,b); //最小公倍数等于两数之积除以最大公约数 return temp_lcm; }群里一个哥们写的 不知道对不对 我还是个菜鸟 public static Int32 GetMinGB(Int32[] arr) { Int32 min = 0; for (Int32 i = arr.Max(); true; i++) { Boolean flag = true; for (Int32 j = 0; j < arr.Length; j++) { if (i % arr[j] != 0) { flag = false; break; } } if (flag) { min = i; break; } } return min; }最慢的穷举... 第一次见这样写的GCD,难道忘了小学学的辗转相除了?BTW,这个问题如果说有些难度,主要是需要考虑大数的问题。 呵呵,俺现实了“大(小)数扩倍法”,for 加 while 就可以了lz 可以自己封装一下,记得加上排序的哦,否则数多的时候效率会比较低L@_@K /* * 求 10、9、8、7、6、5、4、3、2 的最小公倍数。 * least common multiple * * 算法原理: 大(小)数扩倍法 * 要求两个数的最小公倍数,其中较大数不是较小数的倍数,可把较大数(或较小数)扩大2倍、3倍、4倍…… * 从小扩大到某一倍数后所得的数正好是较小数(或较大数)的倍数,那么这个数就是这两个数的最小公倍数。 * 大(小)数扩倍法适用于求两个以上数的最小公倍数。 * * 例:求8和18的最小公倍数。 * 解:因为18×2=36,36不是8的倍数: * 18×3=54,54不是8的倍数; * 18×4=72,72是8的倍数; * 所以[8,18]=72。 */ int[] numbers = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 }; int firstNumber, secondNumber; int leastCommonMultiple = numbers[0]; for (int i = 1; i < numbers.Length; i++) { firstNumber = leastCommonMultiple; secondNumber = numbers[i]; while ((leastCommonMultiple % secondNumber) != 0) { leastCommonMultiple += firstNumber; } Console.WriteLine(secondNumber); Console.WriteLine(leastCommonMultiple); Console.WriteLine("----- ----- ----- -----"); } 最终结果是 2520另,int firstNumber, secondNumber;应改为int largeNumber, smallNumber;其他地方自己改哈,这样更符合算法,容易理解!990----- ----- ----- -----8360----- ----- ----- -----72520----- ----- ----- -----62520----- ----- ----- -----52520----- ----- ----- -----42520----- ----- ----- -----32520----- ----- ----- -----22520----- ----- ----- ----- 偷懒,用类库写了一个算1-100的最小公倍数的。69720375229712477164533808935312303556800using System;using System.Numerics;namespace Extension_Methods_Simple{ class Program { static void Main(string[] args) { int[] nums = new int[100]; for (int i = 0; i < nums.Length; i++) nums[i] = i + 1; BigInteger lcm = 1, gcd; for (int i = 0; i < nums.Length; i++) { gcd = BigInteger.GreatestCommonDivisor(lcm, nums[i]); lcm *= (nums[i] / gcd); } Console.WriteLine(lcm); Console.ReadKey(); } }} C# winform中怎么做出窗口切换的功能? 委托 C#高手进来看看 Response.Write一个window.open来弹出窗口,如何不刷母页面? asp.net中调用js文件中的函数 求一C#函数 在客户端不刷新页面即时更新数据,除了使用 java script 外,还有其他好方法吗? XML究竟要学什么东西? 求C# 调用ADB.EXE的方法 有一点点C的基础,直接进入学习C# 有可能吗? 如何实现 word中显示比例的功能? asp和asp.net(c#)混合的程序,asp想调用c#里边的一类行不行啊?小弟先感谢了!
http://blog.aqedu.cn/user1/evelovecj/archives/2008/32226.html
{
int i,temp_gcd;
for(i=a;i>=1;i--)
{
if(a%i==0)
{
if(b%i==0)
{
temp_gcd=i;
return temp_gcd;
};
};
};
}
int LCM(int a,int b)
{
int temp_lcm;
temp_lcm=a*b/GCD(a,b); //最小公倍数等于两数之积除以最大公约数
return temp_lcm;
}
群里一个哥们写的 不知道对不对 我还是个菜鸟
public static Int32 GetMinGB(Int32[] arr)
{
Int32 min = 0;
for (Int32 i = arr.Max(); true; i++)
{
Boolean flag = true;
for (Int32 j = 0; j < arr.Length; j++)
{
if (i % arr[j] != 0)
{
flag = false;
break;
}
}
if (flag)
{
min = i;
break;
}
} return min;
}最慢的穷举...
BTW,这个问题如果说有些难度,主要是需要考虑大数的问题。
/*
* 求 10、9、8、7、6、5、4、3、2 的最小公倍数。
* least common multiple
*
* 算法原理: 大(小)数扩倍法
* 要求两个数的最小公倍数,其中较大数不是较小数的倍数,可把较大数(或较小数)扩大2倍、3倍、4倍……
* 从小扩大到某一倍数后所得的数正好是较小数(或较大数)的倍数,那么这个数就是这两个数的最小公倍数。
* 大(小)数扩倍法适用于求两个以上数的最小公倍数。
*
* 例:求8和18的最小公倍数。
* 解:因为18×2=36,36不是8的倍数:
* 18×3=54,54不是8的倍数;
* 18×4=72,72是8的倍数;
* 所以[8,18]=72。
*/
int[] numbers = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 }; int firstNumber, secondNumber;
int leastCommonMultiple = numbers[0];
for (int i = 1; i < numbers.Length; i++)
{
firstNumber = leastCommonMultiple;
secondNumber = numbers[i];
while ((leastCommonMultiple % secondNumber) != 0)
{
leastCommonMultiple += firstNumber;
}
Console.WriteLine(secondNumber);
Console.WriteLine(leastCommonMultiple);
Console.WriteLine("----- ----- ----- -----");
}
应改为
int largeNumber, smallNumber;
其他地方自己改哈,这样更符合算法,容易理解!9
90
----- ----- ----- -----
8
360
----- ----- ----- -----
7
2520
----- ----- ----- -----
6
2520
----- ----- ----- -----
5
2520
----- ----- ----- -----
4
2520
----- ----- ----- -----
3
2520
----- ----- ----- -----
2
2520
----- ----- ----- -----
using System;
using System.Numerics;namespace Extension_Methods_Simple
{
class Program
{
static void Main(string[] args)
{
int[] nums = new int[100];
for (int i = 0; i < nums.Length; i++)
nums[i] = i + 1; BigInteger lcm = 1, gcd; for (int i = 0; i < nums.Length; i++)
{
gcd = BigInteger.GreatestCommonDivisor(lcm, nums[i]);
lcm *= (nums[i] / gcd);
} Console.WriteLine(lcm);
Console.ReadKey();
}
}
}