给出一篇有关素数线性筛和区间筛的博客,有兴趣的读者可以自取。

  

  本题大意:

    给定两个四位的素数,没有前导零,每次变换其中的一位,最终使得两个素数相等,输出最小变换次数。要求变换过程中的数也都是素数。

  本题思路:

    求最小步数,用BFS,判断素数,用欧拉筛打表。

  参考代码:

 #include <cstdio>
#include <queue>
#include <map>
#include <cstring>
using namespace std; int star, finish, ans, total = ;
const int maxn = + ;
bool isprime[maxn];
bool isvisited[maxn];
int prime[]; struct node{
int cur, step;
} now, Next; void get_prime() {//欧拉筛打表
memset(isprime, false, sizeof(isprime));
for(int i = ; i < maxn; i ++) {
if(!isprime[i])
prime[total ++] = i;
for(int j = ; j < total; j ++) {
if(prime[j] * i > maxn) break;
isprime[prime[j] * i] = true;
if(i % prime[j] == ) break;
}
}
} int bfs() {
queue <node> Q;
isvisited[star] = true;
now.cur = star;
now.step = ;
Q.push(now);
while(!Q.empty()) {
char num[];
now = Q.front();
Q.pop();
if(now.cur == finish) return now.step;
for(int i = ; i < ; i ++) {
sprintf(num, "%d", now.cur);
for(int j = ; j < ; j ++) {
if(j == && i == ) continue;
if(i == )
Next.cur = j * + (num[] - '') * + (num[] - '') * + (num[] - '');
else if(i == )
Next.cur = j * + (num[] - '') * +(num[] - '') * + (num[] - '');
else if(i == )
Next.cur = j * + (num[] - '') * + (num[] - '') * + (num[] - '');
else if(i == )
Next.cur = j + (num[] - '') * + (num[] - '') * + (num[] - '') * ;
if(!isprime[Next.cur] && !isvisited[Next.cur]) {
Next.step = now.step + ;
isvisited[Next.cur] = ;
Q.push(Next);
}
}
}
}
return -;
} int main () {
memset(isvisited, false, sizeof(isvisited));
get_prime();
int t;
scanf("%d", &t);
while(t --) {
memset(isvisited, false, sizeof(isvisited));
scanf("%d %d", &star, &finish);
ans = bfs();
if(ans == -) printf("Impossible\n");
else printf("%d\n", ans);
}
return ;
}

POJ-3126.PrimePath(欧拉筛素数打表 + BFS)的更多相关文章

  1. Poj 2478-Farey Sequence 欧拉函数,素数,线性筛

    Farey Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14291   Accepted: 5647 D ...

  2. 洛谷 P3383 【模板】线性筛素数-线性筛素数(欧拉筛素数)O(n)基础题贴个板子备忘

    P3383 [模板]线性筛素数 题目描述 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示查询的范 ...

  3. Sum of Consecutive Prime Numbers POJ - 2739 线性欧拉筛(线性欧拉筛证明)

    题意:给一个数 可以写出多少种  连续素数的合 思路:直接线性筛 筛素数 暴力找就行   (素数到n/2就可以停下了,优化一个常数) 其中:线性筛的证明参考:https://blog.csdn.net ...

  4. Goldbach's Conjecture POJ - 2262 线性欧拉筛水题 哥德巴赫猜想

    题意 哥德巴赫猜想:任一大于2的数都可以分为两个质数之和 给一个n 分成两个质数之和 线行筛打表即可 可以拿一个数组当桶标记一下a[i]  i这个数是不是素数  在线性筛后面加个装桶循环即可 #inc ...

  5. poj 2480 Longge's problem 欧拉函数+素数打表

    Longge's problem   Description Longge is good at mathematics and he likes to think about hard mathem ...

  6. Dirichlet's Theorem on Arithmetic Progressions POJ - 3006 线性欧拉筛

    题意 给出a d n    给出数列 a,a+d,a+2d,a+3d......a+kd 问第n个数是几 保证答案不溢出 直接线性筛模拟即可 #include<cstdio> #inclu ...

  7. [bzoj3308]九月的咖啡店_欧拉筛素数_费用流

    bzoj-3308 九月的咖啡店 题目大意:深绘里在九份开了一家咖啡让,如何调配咖啡民了她每天的头等大事我们假设她有N种原料,第i种原料编号为i,调配一杯咖啡则需要在这里若干种兑在一起.不过有些原料不 ...

  8. [CF261E]Maxim and Calculator_搜索_欧拉筛素数_动态规划

    Maxim and Calculator 题目链接:https://www.luogu.org/problem/CF261E 数据范围:略. 题解: 考试的时候只会暴力,学弟太强了$\%\%\% Or ...

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

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

随机推荐

  1. url查询参数解析

    url查询参数解析 1.获取url的各部分值 举例http://i.cnblogs.com/EditPosts.aspx?opt=1 1.window.location.href(设置或获取整个 UR ...

  2. linux驱动开发(四) 字符设备驱动框架(自动创建设备节点)

    代码如下 #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> # ...

  3. span标签 宽度无效解决方案

    完美的解决方案 下 面代码的CSS定义完美解决了span的宽度设置问题. 由于浏览器通常对不支持的CSS属性采取忽略处理的态度, 所以最好将display:inline -block行写在后面,这样在 ...

  4. html页面调用servlet中文乱码问题

    1.需要在html中:<meta charset=utf-8" /> 2.在servlet的doPost方法中 首先:response.setContentType(" ...

  5. Unable to locate Spring NamespaceHandler for XML schema namespace

    1. 问题 本文将讨论Spring中最常见的配置问题 —— Spring的一个命名空间的名称空间处理程序没有找到. 大多数情况下,是由于一个特定的Spring的jar没有配置在classpath下,让 ...

  6. mysql 设置多个字段聚合自增

    DROP TEMPORARY TABLE IF EXISTS ttp_firstInvest; CREATE TEMPORARY TABLE ttp_firstInvest ( userid varc ...

  7. 在CentOS7中利用yum命令安装mysql

    在CentOS7中利用yum命令安装mysql 原创 2016年08月31日 10:42:33 标签: mysql / centos 4832 一.说明 我们是在VMware虚拟机上安装的mysql, ...

  8. Mybatis动态sql及性能优化-3

    内容简介 1.回顾 2.动态sql 3.性能优化 懒加载机制 一级缓存 二级缓存 一.回顾 1.config文件常用标签 properties标签:引入外部properties文件资源. settin ...

  9. 网络层——IP报文头介绍

    IP数据包也叫IP报文分组,传输在ISO网络7层结构中的网络层,它由IP报文头和IP报文用户数据组成,IP报文头的长度一般在20到60个字节之间,而一个IP分组的最大长度则不能超过65535个字节.  ...

  10. C++学习一explicit

    explicit关键字 C++中的关键字explicit主要是用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换.类构造函数默认情况下声明为隐式的即i ...