每周更新的练习曲集,供精明的程序员学习和欣赏
今天的练习是我的道歉,因为我写了一段非常糟糕的代码。
在进行一系列近似平方除数的练习时,我发现约数当除数很大时,我通常使用的函数非常慢。
约数
您的任务是编写一个返回数字除数列表的函数,并以合理的效率工作。完成后,欢迎您阅读或运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。
页:1 2
您的程序在使用278914005382139703576000时的性能如何?
答案是,不算太坏(我想知道如果有很多重复的因素导致合并需要做更多的工作,会发生什么情况):
>(时间(长度(除数4 278914005382139703576000))cpu时间:471实时:472 gc时间:3591032192>(时间(长度(除数4 40729680599249024150621323470))cpu时间:1052实时:1054 gc时间:8142097152
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)])。
Δ