这个方法TLE求优化

给你两个数s,t, 每次从小于s的质因子中挑选一个数加给s,问最少加几次能到达t
输入格式:
第一行输入一个整数T,表示测试组数
接下来T行每行两个整数s,t
输出格式:
对于每组测试数据输出一个最小步数,如果无法到达,输出-1
具体格式见样例输出
样例输入:
2
6 12
6 13
样例输出:
Case 1: 2
Case 2: -1
约定:
T<=500,1<=s<=100,1<=t<=1000

#include<bits/stdc++.h>
using namespace std;
int n,a,b,minl=999999999;
const int zhi[168]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,
                109 ,113,127,131,137 ,139 ,149, 151, 157, 163, 167, 173, 179, 181,191, 193,197,199,211,223,
                227,229,233,239,241,251, 257, 263,269,271,277 ,281, 283 ,293, 307, 311, 313, 317, 331, 337,
                347, 349, 353, 359, 367, 373, 379, 383 ,389 ,397 ,401 ,409, 419 ,421 ,431 ,433 ,439 ,443 ,449 ,457,
                461, 463, 467 ,479, 487, 491, 499, 503, 509, 521, 523 ,541 ,547 ,557 ,563, 569, 571 ,577, 587 ,593,
                599, 601, 607, 613, 617, 619, 631 ,641, 643 ,647 ,653 ,659 ,661 ,673 ,677 ,683 ,691, 701 ,709 ,719,
                727,733, 739, 743 ,751, 757, 761 ,769, 773 ,787, 797 ,809 ,811, 821, 823, 827 ,829, 839,853 ,857,
                859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997};
void dfs(int c,int step){
    if(c==b) minl=min(minl,step);
    if(step>minl) return ;
    for(int i=0;i<168;i++){
        if(c%zhi[i]==0){
            if(c+zhi[i]<=b) dfs(c+zhi[i],step+1);
            else break;
        }
    }
}
int main(){
    cin>>n;
    int d=1;
    while(n--){
        minl=999999999;
        scanf("%d%d",&a,&b);
        dfs(a,0);
        printf("Case %d: ",d++);
        if(minl!=999999999){
            printf("%d\n",minl);
        }else{
            printf("-1\n");
        }
    }
    return 0;
}