题目介绍
题目描述
把一个4位素数 N 通过 K 次转换变成4位素数 M 输出 K 的最小值。
转换要求:只能改变数 N 中的一位(没有前导零)而且在转换过程中的每个数也要为素数。
输入格式
一行,两个四位的素数(没有前导零),表示初始数 N 和目标数 M 。
输出格式
一个数,表示最少的操作次数 K 。如果不可能,输出 “Impossible”。
输入样例
1033 8179
输出样例
6
数据范围与提示
对于100%的数据,满足1000<N,M<10000;
题目思路
此题正解为bfs。首先把N加入队列,接下来每次只要分解每一位,依次变换,检验变换的数是否为素数,若是则加入队列即可。但是本题我们应该考虑,变换过程中可能出现大量重复的数,所以可以进行一次预处理,求出素数表即可。
代码
#include <cstdio>
#include <queue>
#include <cmath>
#include <cstring>