来自厦大何dalao的算法题-最多约数问题

来自厦大软件工程何大佬的作业题

图片来自何dalao(数据规模小于500w)

鉴于10s的时限,直接循环暴力一遍即可通过

当然不是简单的暴力,是有优化的暴力

需要注意的是,判断约数个数时可以使用素数优化的方法,即

图片来自何dalao

先打一个2300内的素数表(因为2300的平方大于500w)

然后根据每一位数进行约数个数的判断,具体方法是对素数表中的数进行逐个逐个判断,能整除则对当前的数字进行整除,将计数的变量加一,直到无法整除为止,将变量得到的数和存储当前约数个数的数字相乘,然后对下一位进行判断。

如果该数的约数个数大于之前所得到的数字的约数个数,则对其进行更新。

需要注意的是,可能某一数字最后会余下一个素数 无法被2300内的素数整除,所以在对2300内的素数数字循环后要进行特殊判断(何dalao就被这一点坑了)。

 

代码就不贴了因为我没写orz。

17/12/10 更新代码

 

发表评论