搜索ulong素数时的代码优化c#

时间:2017-03-21 18:04:04

标签: c# optimization ulong

我正在代码战中对连续的Fib数量挑战产品(https://www.codewars.com/kata/product-of-consecutive-fib-numbers/train/csharp),当我知道如何做到这一点时,我会收到一条消息,提示我的代码需要太长时间(超过12000毫秒)并且我不知道如何优化它。

提前谢谢。

public class ProdFib {
  public static ulong[] productFib(ulong prod) {
        ulong F1 = 0;
        ulong F2 = 1;
        ulong t = 0;


        while (F1 * F2 < prod)
          {
            t = F1 + F2;
            F1 = F2;

            F2 = t;
          }
          ulong[] fib = new ulong[3] { F1, F2, 0};
          for ( ulong i = 2; i < prod; i++)
          {
            if (prod % i == 0)
            {
            fib[2] = 1;
            }
          }
        return fib;
  }

}

1 个答案:

答案 0 :(得分:1)

for ( ulong i = 2; i < prod; i++)
{
    if (prod % i == 0)
    {
        fib[2] = 1;
        ***break;***
    }
}

通过添加break,您可以加快代码速度。但我不确定他们是否通过了所有测试

编辑:

 public static ulong[] productFib(ulong prod)
    {
        ulong F1 = 0;
        ulong F2 = 1;
        ulong t = 0;


        while (F1 * F2 < prod)
        {
            t = F1 + F2;
            F1 = F2;

            F2 = t;

        }
        ulong[] fib;
        if (F1*F2 == prod)
        {
            fib = new ulong[3] { F1, F2, 1 };
        }else
        {
            fib = new ulong[3] { F1, F2, 0 };
        }

        return fib;
    }

使用那样的功能