用除数求和一个数来得到另一个数

时间:2017-09-26 16:06:41

标签: algorithm math

有两个数字A和B,在每一步中我们可以将A与一个除数期望1和A相加。我们想要从A到B,我们可以得到B的最小步骤是什么?有时我们无法从A打印-1获得B.我想要一种能够解决这个问题的算法。

编辑:在每个步骤中考虑Z = A和Z中的一个除数Z期望1和Z得到B

4℃; = A< = B< = 100000

示例:A = 4,B = 24

4-> 6-> 8-> 12-> 18-> 24

正如你所看到的,这个例子的答案是5。

1 个答案:

答案 0 :(得分:1)

您可以使用动态编程解决此问题

#include <iostream>
using namespace std;
#define INF 1000000007
int main() {
    // your code goes here
    int dp[101] = {0};
    int a,b,i,j;
    scanf("%d%d",&a, &b);
    for(i=a;i<=b;i++)
        dp[i] = INF;
    dp[a] = 0;
    for(i=a; i<=b; i++){
        for(j=2; j*j<=i; j++){
            if(i%j == 0){
                dp[i+j] = min(dp[i+j], dp[i]+1);
                dp[i+i/j] = min(dp[i+i/j], dp[i]+1);
            }
        }
    }
    printf("%d\n", dp[b]);
    return 0;
}

dp [i]会更新所有i + j,其中j是i的因子

  

复杂度O(n * sqrt(n))

online compiler

中查看