Prime Path

The ministers of the cabinet were quite upset by the message from the Chief of Security stating that they would all have to change the four-digit room numbers on their offices. 
— It is a matter of security to change such things every now and then, to keep the enemy in the dark. 
— But look, I have chosen my number 1033 for good reasons. I am the Prime minister, you know! 
— I know, so therefore your new number 8179 is also a prime. You will just have to paste four new digits over the four old ones on your office door. 
— No, it’s not that simple. Suppose that I change the first digit to an 8, then the number will read 8033 which is not a prime! 
— I see, being the prime minister you cannot stand having a non-prime number on your door even for a few seconds. 
— Correct! So I must invent a scheme for going from 1033 to 8179 by a path of prime numbers where only one digit is changed from one prime to the next prime.

Now, the minister of finance, who had been eavesdropping, intervened. 
— No unnecessary expenditure, please! I happen to know that the price of a digit is one pound. 
— Hmm, in that case I need a computer program to minimize the cost. You don't know some very cheap software gurus, do you? 
— In fact, I do. You see, there is this programming contest going on... Help the prime minister to find the cheapest prime path between any two given four-digit primes! The first digit must be nonzero, of course. Here is a solution in the case above.

1033 
1733 
3733 
3739 
3779 
8779 
8179

The cost of this solution is 6 pounds. Note that the digit 1 which got pasted over in step 2 can not be reused in the last step – a new 1 must be purchased.

Input

One line with a positive number: the number of test cases (at most 100). Then for each test case, one line with two numbers separated by a blank. Both numbers are four-digit primes (without leading zeros).

Output

One line for each case, either with a number stating the minimal cost or containing the word Impossible.

Sample Input

  1. 3
  2. 1033 8179
  3. 1373 8017
  4. 1033 1033

Sample Output

  1. 6
  2. 7
  3. 0
  4.  
  5. 题意:题目较长,实际就是给你两个四位素数,让你每次只能更改第一个素数的其中一位,更改后要求也是素数且位数不变,问你至少需要更改几次才能变成第二个素数。无解输出Impossible
    思路:本题涉及到素数,每次更改后均需要判断,所以避免重复计算,在程序开始先用筛法把每个四位数的素数性提前存到数组prime。之后分别更改一位数值(第一位不可能是0,最后一位只能是奇数),记录下变更次数即可。
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<queue>
  4. using namespace std;
  5.  
  6. int prime[],bo[];
  7. struct Node{
  8. int x,s;
  9. }node;
  10.  
  11. int main()
  12. {
  13. int t,a,b,f,i,j;
  14. prime[]=;
  15. for(i=;i<=;i++){
  16. if(!prime[i]){
  17. for(j=;i*j<=;j++){
  18. prime[i*j]=; //素数筛选
  19. }
  20. }
  21. }
  22. scanf("%d",&t);
  23. while(t--){
  24. queue<Node> q;
  25. memset(bo,,sizeof(bo));
  26. scanf("%d%d",&a,&b);
  27. if(a==b) printf("0\n");
  28. else{
  29. bo[a]=;
  30. node.x=a;
  31. node.s=;
  32. q.push(node);
  33. f=;
  34. while(q.size()){
  35. int tx=q.front().x;
  36. for(i=;i<=;i++){
  37. if(i!=tx%&&!prime[tx-tx%+i]&&bo[tx-tx%+i]==){
  38. if(tx-tx%+i==b){
  39. f=q.front().s+;
  40. break;
  41. }
  42. bo[tx-tx%+i]=;
  43. node.x=tx-tx%+i;
  44. node.s=q.front().s+;
  45. q.push(node);
  46. }
  47. if(i!=tx/%&&!prime[tx-tx/%*+i*]&&bo[tx-tx/%*+i*]==){
  48. if(tx-tx/%*+i*==b){
  49. f=q.front().s+;
  50. break;
  51. }
  52. bo[tx-tx/%*+i*]=;
  53. node.x=tx-tx/%*+i*;
  54. node.s=q.front().s+;
  55. q.push(node);
  56. }
  57. if(i!=tx/%&&!prime[tx-tx/%*+i*]&&bo[tx-tx/%*+i*]==){
  58. if(tx-tx/%*+i*==b){
  59. f=q.front().s+;
  60. break;
  61. }
  62. bo[tx-tx/%*+i*]=;
  63. node.x=tx-tx/%*+i*;
  64. node.s=q.front().s+;
  65. q.push(node);
  66. }
  67. if(i!=&&i!=tx/&&!prime[tx-tx/*+i*]&&bo[tx-tx/*+i*]==){
  68. if(tx-tx/*+i*==b){
  69. f=q.front().s+;
  70. break;
  71. }
  72. bo[tx-tx/*+i*]=;
  73. node.x=tx-tx/*+i*;
  74. node.s=q.front().s+;
  75. q.push(node);
  76. }
  77. }
  78. if(f!=) break;
  79. q.pop();
  80. }
  81. if(f==) printf("Impossible\n");
  82. else printf("%d\n",f);
  83. }
  84. }
  85. return ;
  86. }

POJ - 3126 Prime Path 素数筛选+BFS的更多相关文章

  1. Prime Path(素数筛选+bfs)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9519   Accepted: 5458 Description The m ...

  2. POJ 3126 Prime Path 素数筛,bfs

    题目: http://poj.org/problem?id=3126 困得不行了,没想到敲完一遍直接就A了,16ms,debug环节都没进行.人品啊. #include <stdio.h> ...

  3. POJ 3126 - Prime Path - [线性筛+BFS]

    题目链接:http://poj.org/problem?id=3126 题意: 给定两个四位素数 $a,b$,要求把 $a$ 变换到 $b$.变换的过程每次只能改动一个数,要保证每次变换出来的数都是一 ...

  4. POJ 3126 Prime Path(素数路径)

    POJ 3126 Prime Path(素数路径) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 The minister ...

  5. BFS POJ 3126 Prime Path

    题目传送门 /* 题意:从一个数到另外一个数,每次改变一个数字,且每次是素数 BFS:先预处理1000到9999的素数,简单BFS一下.我没输出Impossible都AC,数据有点弱 */ /**** ...

  6. 双向广搜 POJ 3126 Prime Path

      POJ 3126  Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16204   Accepted ...

  7. poj 3126 Prime Path bfs

    题目链接:http://poj.org/problem?id=3126 Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  8. POJ 3126 Prime Path【从一个素数变为另一个素数的最少步数/BFS】

    Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26475 Accepted: 14555 Descript ...

  9. POJ 3126 Prime Path (bfs+欧拉线性素数筛)

    Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...

随机推荐

  1. [2011山东ACM省赛] Binomial Coeffcients(求组合数)

    Binomial Coeffcients nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; ...

  2. android lanchmode

    http://www.cnblogs.com/xiaoQLu/archive/2012/07/17/2595294.html http://www.cnblogs.com/lwbqqyumidi/p/ ...

  3. Android-addToBackStack使用和Fragment执行流程

    文章来源:https://blog.csdn.net/wenxuzl99/article/details/16112725 在使用Fragment的时候我们一般会这样写: FragmentTransa ...

  4. EasyRTMP实现RTMP异步直播推送之环形缓冲区设计

    本文转自EasyDarwin团队kim的博客:http://blog.csdn.net/jinlong0603 EasyRTMP的推送缓冲区设计 EasyRTMP内部也同样采用的环形缓冲的设计方法,将 ...

  5. Java类加载器( 死磕9)

    [正文]Java类加载器(  CLassLoader ) 死磕9:  上下文加载器原理和案例 本小节目录 9.1. 父加载器不能访问子加载器的类 9.2. 一个宠物工厂接口 9.3. 一个宠物工厂管理 ...

  6. SAP 系统账期开关

    (1)OB52 财务账期-C 财务维护表 T001B[维护表T001B] (2)OB29 -C FI 财政年变式 (3)MMPV / MMRV -物料账期 MMPV 商品会计期间设置-结帐期间 [ 如 ...

  7. 青岛理工交流赛 H题 素数间隙

    13110581088注销 素数间隙 Time Limit: 1000MS Memory limit: 262144K 题目描述 Neko猫是一个很喜欢玩数字游戏的会说话的肥猫,经常会想到很多很好玩的 ...

  8. HDU5015 233 Matrix —— 矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-5015 233 Matrix Time Limit: 10000/5000 MS (Java/Others)    Memor ...

  9. Codeforces Round #376 (Div. 2) D. 80-th Level Archeology —— 差分法 + 线段扫描法

    题目链接:http://codeforces.com/contest/731/problem/D D. 80-th Level Archeology time limit per test 2 sec ...

  10. Chrome 插件 Vimium——让你脱离鼠标

    下面是帮助,按?就能出现.什么时候忘了可以随时查看.^_^