kjhgfx
#include<bits/stdc++.h> using namespace std; const int maxn = 1e4 + 9; bool prime[maxn]; int vis[maxn]; //vis[i]表示从Q到i需要的次数 void init() { //埃氏筛素数 prime[1] = 1; for (int i = 2; i *i < maxn; i++) { for (int j = 2 * i; j < maxn; j += i) prime[j] = 1; } } int bfs(int Q, int W) { memset(vis, -1, sizeof(vis)); //用-1表示从Q到不能到i,多组数据,每次需要初始化 queue<int> q; q.push(Q); vis[Q] = 0; //Q到Q的次数是0 while (q.size()) { int r = q.front(); q.pop(); if (r == W) return vis[W]; for (int i = 0; i < 10; i++) { //个位 int tm = r - r % 10 + i; if (prime[tm] == 0 && vis[tm] == -1 && tm >= 1000) { //题目说改变后的数要在1000~9999范围内 q.push(tm); vis[tm] = vis[r] + 1; } //十位 tm = r - (r / 10 % 10) * 10 + i * 10; if (prime[tm] == 0 && vis[tm] == -1 && tm >= 1000) { q.push(tm); vis[tm] = vis[r] + 1; } //百位 tm = r - (r / 100 % 10) * 100 + i * 100; if (prime[tm] == 0 && vis[tm] == -1 && tm >= 1000) { q.push(tm); vis[tm] = vis[r] + 1; } //千位 tm = r - (r / 1000 % 10) * 1000 + i * 1000; if (prime[tm] == 0 && vis[tm] == -1 && tm >= 1000) { q.push(tm); vis[tm] = vis[r] + 1; } } } return 0; } int main() { init(); int _; cin >> _; while (_--) { int Q, W; cin >> Q >> W; cout << bfs(Q, W) << '\n'; } return 0; }