#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#include<math.h>
#include<queue>
using namespace std;
#define INF 0x3f3f3f3f
#define N 10000
int a[N],qq[N],w[N];
int e,f;
struct node
{
    int x,s;
};
int q()
{
    memset(w,0,sizeof(w));
    queue<node> Q;
    node q,p;
    q.x=e;
    q.s=0;
    w[e]=1;
    Q.push(q);
    while(Q.size())
    {
        p=Q.front();Q.pop();
        if(p.x==f)
            return p.s;
        a[1]=p.x/1000;
        a[2]=p.x/100%10;
        a[3]=p.x/10%10;
        a[4]=p.x%10;
        for(int i=1;i<=4;i++)
        {
            for(int j=1;j<=10;j++)
            {
                a[i]=(a[i]+1)%10;
                int d=0;
                for(int k=1;k<=4;k++)
                    d=d*10+a[k];
                if(d>=1000&&d<=9999&&!w[d]&&qq[d]==1)
                {
                    q.x=d;
                    q.s=p.s+1;
                    Q.push(q);
                    w[d]=1;
                }
            }
        }
    }
    return -1;
}
int main()
{
    int T;
    for(int i=2;i<N;i++)
    {
        if(!a[i])
        {
            qq[i]=1;
            for(int j=i+i;j<N;j+=i)
                a[j]=1;
        }
    }
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&e,&f);
        int ans=q();
        printf("%d\n",ans);
    }
    return 0;
}

http://poj.org/problem?id=3126

posted on 2016-07-16 09:39  云胡不喜。  阅读(146)  评论(0编辑  收藏  举报