某大厂二面挂,算法没手撕出来

输入很多数字,每个数字一行,输出每个数字有多少总分解的数量。

a=a1*a2*a3... (ai<=a(i+1)) 同时要求1<ai

例如:10 = 1x10 10 = 2x5。所以输出2。这个例子我可能记错了

有算法佬么,此题什么思路呢,我使用暴力搜索会超时

全部评论
预处理2到max(输入数字x)这些数的最小质因子是什么。然后logx级别的时间复杂度进行质因数分解。比如一个数是2的a次方*3的b次方*5的c方。那他的总分解数就是(a+1)*(b+1)*(c+1)/2。
2 回复 分享
发布于 2024-10-22 09:45 广东
质因数分解
点赞 回复 分享
发布于 2024-10-31 14:48 上海
有个问题,1*2*5不算吗
点赞 回复 分享
发布于 2024-10-22 09:33 黑龙江
优化根号n,再加记忆应该可以吧
点赞 回复 分享
发布于 2024-10-22 09:30 浙江
如果每个数都不会很大,比如1e9这种,可以预处理,用dp统计每个数的因子数,答案是因子数/2,上取整
点赞 回复 分享
发布于 2024-10-22 09:23 广东
请问有leetcode有类似题目么,没找到相似的
点赞 回复 分享
发布于 2024-10-21 21:52 北京
感觉应该是dp
点赞 回复 分享
发布于 2024-10-21 21:45 天津
dp 吧
点赞 回复 分享
发布于 2024-10-21 21:45 山东

相关推荐

01-19 15:14
已编辑
延安大学 C++
点赞 评论 收藏
分享
思念SiN:你这里没有通过的主要原因应该是计算平均分数的时候,在你贴的代码的第23行: ```c b[i]=(sum-max-min)/(m-2); ``` 等式的右边实际上是两个`int`类型的变量在做除法,C语言里面得到的结果会是这个除法的整数部分,余数部分被舍弃了,也不会自动变成浮点数去做除法。所以虽然你使用了`b[i]`这个浮点数去接收结果,但是等式右边除法是先得到了一个整数,然后再被转换为浮点数再赋值给了`b[i]`。你可以按下面这样,在做除法之前,先进行类型转换,就能得到期望的结果: ```c b[i]=(float)(sum-max-min)/(float)(m-2); ```
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务