小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3…….
这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。
例如:
N = 4,M = 24:
4->6->8->12->18->24
于是小易最少需要跳跃5次,就可以从4号石板跳到24号石板
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class step{
int count;
int now;
public step(int now,int count){
this.now = now;
this.count = count;
}
}
public class Main {
public static int Solution(int num,int aim){
int[] vis = new int[aim+10];
Queue<step> que = new LinkedList<step>();
que.offer(new step(num,0));
vis[num] = 1;
while(!que.isEmpty()){
step s = que.peek();
que.poll();
if(s.now == aim) return s.count;
for(int i = 2;i*i <= s.now ;i++){
if(s.now % i==0){
int x = s.now + i;
int y = s.now/i + s.now;
if(x <= aim && vis[x]==0){
que.offer(new step(x,s.count+1));
vis[x] = 1;
}
if(y!=x&&y<=aim&&vis[y]==0){
que.offer(new step(y,s.count+1));
vis[y] = 1;
}
}
}
}
return -1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
while(cin.hasNext()){
int n = cin.nextInt();
int aim = cin.nextInt();
System.out.println(Solution(n,aim));
}
}
}