#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 ",ans); } return 0; }
http://poj.org/problem?id=3126