相关疑难解决方法(0)

找到给定数字的所有因子的最佳方法

所有数字均匀分配为x.

我输入4它返回:4,2,1

编辑:我知道这听起来像家庭作业.我正在编写一个小应用程序,用半随机测试数据填充一些产品表.其中两个属性是ItemMaximum和Item Multiplier.我需要确保乘数不会产生不合逻辑的情况,即购买1个项目会使订单超过允许的最大值.因此,这些因子将为我的测试数据提供有效值列表.

编辑++:这是我在所有人的帮助下使用的内容.再次感谢!

编辑#:我写了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 = …
Run Code Online (Sandbox Code Playgroud)

.net c# math

30
推荐指数
4
解决办法
4万
查看次数

二进制字符串排列

我在http://www.interviewstreet.com上遇到了一个问题.

Bob收到了Alice发送的长度为N的二进制字符串.他知道由于传输错误,最多K位可能已被破坏(因此被翻转).但是,他也知道Alice打算传输的字符串不是周期性的.如果字符串不能表示为连接多次的较小字符串,则该字符串不是周期性的.例如,"0001","0110"不是周期性的,而"00000","010101"是周期性字符串.现在他想知道Alice有多少可能的字符串传输.

首先,我使用二项式定理进行了一些测试,并通过使用它,我能够找到在给定字符串和多个损坏位的情况下可以表示字符串的不同方式.我的第二步是找到一种方法来查找周期性字符串的数量.我看到这可以通过带有素数长度的字符串轻松完成.这是通过检查是否有足够的0或1来填充字符串仅用0或1来完成.

1111111或0000000

现在我使用的是一种纯粹的强力算法,当涉及到任何类型的大字符串时,它都不会削减它.是否有任何类型的组合技术可以指出我有助于解决这个问题?谢谢.

algorithm permutation

8
推荐指数
1
解决办法
5973
查看次数

得到所有除数的最有效方法

可能重复:
有效地查找数字的所有除数

这更像是一个效率问题,而不是通用的"找到一种方法",但在得到一些奇怪的结果后,我想看看是否有人可以告诉我为什么最后一种方式如此低效:

方式1:蛮力,没有优化

    public static List<int> proper_divisors(int x)
    {
        List<int> toreturn = new List<int>();
        for (int i = 1; i <= Math.Floor(Math.Sqrt(x)); i++)
        {
            if (x % i == 0)
            {
                toreturn.Add(i);
                toreturn.Add(x / i);
            }
        }
        if (toreturn.ElementAt(toreturn.Count() / 2) == toreturn.ElementAt(toreturn.Count() / 2 - 1))
        {
            toreturn.Remove(toreturn.ElementAt(toreturn.Count() / 2));
        }

        return toreturn;
    }
Run Code Online (Sandbox Code Playgroud)

方式2:与之前相同,但这一次,检查它是否为第一个(因为这些情况占用了大部分时间,使用miller-rabin进行初步检查)

        public static List<int> proper_divisors(int x)
    {
        List<int> toreturn = new List<int>();
        if (!isprime(x))
        {
            for (int i = 1; i <= Math.Floor(Math.Sqrt(x)); i++) …
Run Code Online (Sandbox Code Playgroud)

.net c# primes aggregate factorization

6
推荐指数
1
解决办法
9049
查看次数

标签 统计

.net ×2

c# ×2

aggregate ×1

algorithm ×1

factorization ×1

math ×1

permutation ×1

primes ×1