2015年2月28日 星期六

[UVA] 11730 - Number Transformation

#include<bits/stdc++.h>
using namespace std;
struct P{
    int u,add;
}in,out;
int is[1005];
vector<int> pri;
int main(){
    int t,n,m,i,j,C=0;
    for(i=2;i<=1000;i++){
        if(is[i]==0){
            for(j=i+i;j<=1000;j+=i){
                is[j]=1;
            }
            pri.push_back(i);
        }
    }
    while(scanf("%d%d",&n,&m)!=EOF && n&&m){
        queue<P> que;
        que.push((P){n,0});
        int vi[1005]={0},flag=0;
        vi[n]=1;
        while(que.size()){
            out=que.front();
            que.pop();
            if(out.u==m){
                flag=1;
                break;
            }
            for(i=0;i<pri.size() && pri[i]<out.u;i++){
                in.add=out.add+1;
                if(out.u%pri[i]) continue;
                in.u=out.u+pri[i];
                if(vi[in.u] || in.u>m) continue;
                vi[in.u]=1;
                que.push(in);
            }
        }
        printf("Case %d: %d\n",++C,flag?out.add:-1);
    }
}

沒有留言:

張貼留言