为什么我的代码在"decrease to zero"问题中被时间超过了

why my code is getting time excedded in "decrease to zero" problem

本文关键字:时间 过了 问题 to 代码 我的 decrease 为什么 zero      更新时间:2023-10-16

试图解决黑客排名问题。

系统会为您提供 Q 查询。每个查询由一个数字 N 组成。您可以在每个移动中对 N 执行 2 个操作。如果 N=a×b(a≠1, b≠1(,我们可以更改 N=max(a,b( 或将 N 的值减少 1。确定将 N 的值减小到 0 所需的最小移动次数。

你能建议我如何改进我的代码吗?

int downToZero(int n) {
int dp[n+1];
dp[0]=0;dp[1]=1;dp[2]=2;dp[3]=3;
for(int i=4;i<=n;i++)
{
dp[i]=dp[i-1]+1;
for(int j=2;j*j<=i;j++)
{
if(i%j==0)
{
int fac=max(j, i/j);
dp[i]=min(dp[i], dp[fac]+1);
}
}
}
return dp[n];
} 

太慢的位是:

for(int j=2;j*j<=i;j++)
{
if(i%j==0)

您正在线性扫描以查找因素。必须有更好的方法。例如,保留素数列表。