除数道歉

2016年9月9日

今天的练习是我的道歉,因为我写了一段非常糟糕的代码。

在进行一系列近似平方除数的练习时,我发现约数当除数很大时,我通常使用的函数非常慢。

您的任务是编写一个返回数字除数列表的函数,并以合理的效率工作。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

3对“除数道歉”的回应

  1. 您的程序在使用278914005382139703576000时的性能如何?

  2. 答案是,不算太坏(我想知道如果有很多重复的因素导致合并需要做更多的工作,会发生什么情况):

    >(时间(长度(除数4 278914005382139703576000))cpu时间:471实时:472 gc时间:3591032192>(时间(长度(除数4 40729680599249024150621323470))cpu时间:1052实时:1054 gc时间:8142097152
  3. 大卫

    Erlang可以在2-4秒内计算出这些较大数字的除数。(马修的较小数字是1.6秒;较大的数字是4秒。)我并没有要求任何功劳,因为实现只是一个简单而天真的列表理解。

    %除数(n)%-返回n的所有除数列表%当is_integer(N)->除数(因式分解(N))时,除数(N);当is_list(L)->sort(divisors(L,[1]))时,除数(L)。除数([],除数)->除数;除数([{P,R}|因子],除数)->除数(因子,[D*imath:pow(P,E)||D<-除数,E<-seq(0,R)])。

留下评论