#include<iostream> #include<queue> #include<string> #include<stdio.h> #include<ctype.h> #include<stdlib.h> using namespace std; int prime[10000]; int visited[10000]; int a,b; void Is_Prime()//素数打表 { prime[0]=1;prime[1]=1; for(int i=2;i<10000;i++) { if(prime[i]==0) { for(int j=i+i;j<10000;j=j+i) prime[j]=1; } } } struct node//素数及其步数 { int x,steps; }; int bfs() { queue<node> que; node pre,next; pre.x=a; pre.steps=0; visited[a]=1; que.push(pre); while(!que.empty()) { pre=que.front(); que.pop(); if(pre.x==b) return pre.steps; char prech[5]; sprintf(prech,"%d",pre.x);//将pre.x装换成字符串存入prech。 for(int i=0;i<4;i++) { char prech1[5]; strcpy(prech1,prech); for(int j=0;j<=9;j++) { if(i==0&&j==0) continue;//千位不能为0, prech1[i]=j+'0'; next.x=atoi(prech1); if(prime[next.x]==0&&visited[next.x]==0) { visited[next.x]=1; next.steps=pre.steps+1; que.push(next); } } } } } int main() { int Ncases; Is_Prime(); scanf("%d",&Ncases); while(Ncases--) { scanf("%d%d",&a,&b); printf("%d/n",bfs()); memset(visited,0,sizeof(visited)); } return 0; }