In this problem, you are given an integer number s. You can transform any integer number A to another integer number B by adding x to A. This x is an integer number which is a prime factor of A (please note that 1 and A are not being considered as a factor of A). Now, your task is to find the minimum number of transformations required to transform s to another integer number t.

Input

Input starts with an integer T (≤ 500), denoting the number of test cases.

Each case contains two integers: s (1 ≤ s ≤ 100) and t (1 ≤ t ≤ 1000).

Output

For each case, print the case number and the minimum number of transformations needed. If it's impossible, then print -1.

Sample Input

2

6 12

6 13

Sample Output

Case 1: 2

Case 2: -1

思路:一开始理解错了,  这个题目的就是给你个整数s, 加他的素质数,以最小的次数转换到t,能转换为t输出叠加次数,否则输出-1;注意:这里的是素质数会随着s的而改变,即素质数的数组是变化的。

这个题目可以理解为  一个x数轴从S点,每次加上他的素质数,是否能得到t点;

AC代码

#include<iostream>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
const int N=;
vector<int >arr; struct stu{
int a;
int s;
}e1,e2,e3; int pri[N]={,,};
int n,m;
int mark[N]={}; int prime(){//将1010以内的素数打个表
for(int i=;i*i<=N;i++){
if(!pri[i])
for(int j=i+i;j<=N;j+=i){
pri[j]=;
}
}
} void f(int x){//寻找素质数
for(int i=;i<x;i++){
if(x%i==&&pri[i]==){
arr.push_back(i);
}
}
} int bfs(int n,int m){// 起点与终点
memset(mark,,sizeof(mark));
queue<stu>que;
e1.a=n;
e1.s=;
que.push(e1);
mark[n]=;
while(que.size()){
e2=que.front();
que.pop();
arr.clear();
f(e2.a);//更新素质数的数组
if(arr.size()==)
continue ;
for(int i=;i<arr.size();i++){
e3.a=e2.a+arr[i];
if(mark[e3.a]!=&&e3.a>=&&e3.a<=m){
mark[e3.a]=;
if(e3.a==m) return e2.s+;
else {
e3.s=e2.s+;
que.push(e3);
}
}
}
}
return -;
} int main()
{
prime();
int t;
cin>>t;
for(int i=;i<=t;i++){
cin>>n>>m;
if(m-n==)
{
int a=;
printf("Case %d: %d\n",i,a);
continue ;
}
else if(n>m||m-n==)//n若比M小或者相差为1 直接 -1;
{
int a=-;
printf("Case %d: %d\n",i,a);
continue ; }
int x=bfs(n,m);
if(x==-)
{
printf("Case %d: %d\n",i,x);
}
else {
printf("Case %d: %d\n",i,x);
}
} return ;
}

G - Number Transformation BFS的更多相关文章

  1. G - Number Transformation(BFS+素数)

    In this problem, you are given an integer number s. You can transform any integer number A to anothe ...

  2. Codeforces 251C Number Transformation

    Number Transformation 我们能发现这个东西是以2 - k的lcm作为一个循环节, 然后bfs就好啦. #include<bits/stdc++.h> #define L ...

  3. LightOJ 1141 Number Transformation

    Number Transformation In this problem, you are given an integer number s. You can transform any inte ...

  4. hdu4952 Number Transformation (找规律)

    2014多校 第八题 1008 2014 Multi-University Training Contest 8 4952 Number Transformation Number Transform ...

  5. bzoj 3858: Number Transformation 暴力

    3858: Number Transformation Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 82  Solved: 41[Submit][Sta ...

  6. HDU-4952 Number Transformation

    http://acm.hdu.edu.cn/showproblem.php?pid=4952 Number Transformation Time Limit: 2000/1000 MS (Java/ ...

  7. CodeForces346 C. Number Transformation II

    C. Number Transformation II time limit per test 1 second memory limit per test 256 megabytes input s ...

  8. CCPC2018-湖南全国邀请赛 G String Transformation

    G.String Transformation 题目描述 Bobo has a string S = s1 s2...sn consists of letter a , b and c . He ca ...

  9. CodeForces 346C Number Transformation II

    Number Transformation II 题解: 对于操作2来说, a - a % x[i] 就会到左边离a最近的x[i]的倍数. 也就是说 [ k * x[i] + 1,  (k+1)* x ...

随机推荐

  1. DNS提供的服务

    DNS提供的服务 DNS是:1.一个由分层的DNS服务器实现的分布式数据库:2. 一个使主机能够查询分布式数据库的应用协议.DNS协议运行在UDP上,使用53号端口. 与http,FTP,SMTP协议 ...

  2. 单调栈-Maximum Width Ramp

    2020-01-23 19:39:26 问题描述: 问题求解: public int maxWidthRamp(int[] A) { Stack<Integer> stack = new ...

  3. Ansible Playbook 初识

    Ansible Playbook 基本概述与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: ...

  4. Log4Net读取XML配置文件及在代码中完成添加Logger操作

    解决问题: 将log4net配置文件与app.config配置文件分开 手动读取log4net配置文件 手动创建logger 可将日志输出功能封装在类库中,应用程序引用时无需添加assembly引用及 ...

  5. effective-java学习笔记---注解优于命名模式39

    命名模式的缺点有以下三点:(在第 4 版之前,JUnit 测试框架要求其用户通过以 test[Beck04] 开始名称来指定测试方法) 1.拼写错误导致失败,但不会提示. 2.无法确保它们仅用于适当的 ...

  6. coding++ :MySQL 使用 SQL 语句查询数据库所有表注释已经表字段注释

    1.要查询数据库 "mammothcode" 下所有表名以及表注释 /* 查询数据库 ‘mammothcode’ 所有表注释 */ SELECT TABLE_NAME,TABLE_ ...

  7. ElasticSearch 倒排索引

    倒排索引 倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况. 由于每个字或词对应的文档 ...

  8. 实现ls

    一.任务详情 参考伪代码实现ls的功能,提交代码的编译,运行结果截图,码云代码链接 打开目录文件 针对目录文件 读取目录条目 显示文件名 关闭文件目录文件 二.伪代码 opendir while(re ...

  9. Java并发基础09. 多个线程间共享数据问题

    先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作 ...

  10. CCF题库刷题编译错误

    最近在CCF上刷题,因为C语言更合适,就使用了devc编译器,选择C语言但是却报编译错误 后来查了一下,发现在提交时选择C++语言就能满分通过,问题得以解决.