【发布时间】:2008-10-27 13:28:52
【问题描述】:
所有能除以 x 的数。
我输入 4 它返回:4、2、1
编辑:我知道这听起来很家庭作业。我正在编写一个小应用程序来用半随机测试数据填充一些产品表。其中两个属性是 ItemMaximum 和 Item Multiplier。我需要确保乘数不会造成不合逻辑的情况,即再购买 1 件商品会使订单超过允许的最大值。因此,这些因素将为我的测试数据提供一个有效值列表。
编辑++: 在大家的帮助下,这就是我所做的。再次感谢!
edit#:我写了 3 个不同的版本来看看我更喜欢哪个版本,并针对分解小数字和非常大的数字对它们进行了测试。我会粘贴结果。
static IEnumerable<int> GetFactors2(int n)
{
return from a in Enumerable.Range(1, n)
where n % a == 0
select a;
}
private IEnumerable<int> GetFactors3(int x)
{
for (int factor = 1; factor * factor <= x; factor++)
{
if (x % factor == 0)
{
yield return factor;
if (factor * factor != x)
yield return x / factor;
}
}
}
private IEnumerable<int> GetFactors1(int x)
{
int max = (int)Math.Ceiling(Math.Sqrt(x));
for (int factor = 1; factor < max; factor++)
{
if(x % factor == 0)
{
yield return factor;
if(factor != max)
yield return x / factor;
}
}
}
在滴答声中。 将数字 20 分解时,每个 5 次:
- GetFactors1-5,445,881
- GetFactors2-4,308,234
- GetFactors3-2,913,659
当因式分解数字 20000 时,每次 5 次:
- GetFactors1-5,644,457
- GetFactors2-12,117,938
- GetFactors3-3,108,182
【问题讨论】:
-
您确实知道,我希望,对于他的问题没有已知的通用高性能解决方案。现代密码学依赖于没有这样的解决方案。
-
是的,但我不确定是否有比简单地逐个测试数字更好的方法,因为我已经有一段时间没有上过数学课了。
-
python中的相关问题
-
一个简单的winform应用程序,可以提供帮助findingnumberfactors.codeplex.com