POJ-3126.PrimePath(欧拉筛素数打表 + BFS)
给出一篇有关素数线性筛和区间筛的博客,有兴趣的读者可以自取。
本题大意:
给定两个四位的素数,没有前导零,每次变换其中的一位,最终使得两个素数相等,输出最小变换次数。要求变换过程中的数也都是素数。
本题思路:
求最小步数,用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)的更多相关文章
- Poj 2478-Farey Sequence 欧拉函数,素数,线性筛
Farey Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14291 Accepted: 5647 D ...
- 洛谷 P3383 【模板】线性筛素数-线性筛素数(欧拉筛素数)O(n)基础题贴个板子备忘
P3383 [模板]线性筛素数 题目描述 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示查询的范 ...
- Sum of Consecutive Prime Numbers POJ - 2739 线性欧拉筛(线性欧拉筛证明)
题意:给一个数 可以写出多少种 连续素数的合 思路:直接线性筛 筛素数 暴力找就行 (素数到n/2就可以停下了,优化一个常数) 其中:线性筛的证明参考:https://blog.csdn.net ...
- Goldbach's Conjecture POJ - 2262 线性欧拉筛水题 哥德巴赫猜想
题意 哥德巴赫猜想:任一大于2的数都可以分为两个质数之和 给一个n 分成两个质数之和 线行筛打表即可 可以拿一个数组当桶标记一下a[i] i这个数是不是素数 在线性筛后面加个装桶循环即可 #inc ...
- poj 2480 Longge's problem 欧拉函数+素数打表
Longge's problem Description Longge is good at mathematics and he likes to think about hard mathem ...
- Dirichlet's Theorem on Arithmetic Progressions POJ - 3006 线性欧拉筛
题意 给出a d n 给出数列 a,a+d,a+2d,a+3d......a+kd 问第n个数是几 保证答案不溢出 直接线性筛模拟即可 #include<cstdio> #inclu ...
- [bzoj3308]九月的咖啡店_欧拉筛素数_费用流
bzoj-3308 九月的咖啡店 题目大意:深绘里在九份开了一家咖啡让,如何调配咖啡民了她每天的头等大事我们假设她有N种原料,第i种原料编号为i,调配一杯咖啡则需要在这里若干种兑在一起.不过有些原料不 ...
- [CF261E]Maxim and Calculator_搜索_欧拉筛素数_动态规划
Maxim and Calculator 题目链接:https://www.luogu.org/problem/CF261E 数据范围:略. 题解: 考试的时候只会暴力,学弟太强了$\%\%\% Or ...
- POJ 3126 Prime Path (bfs+欧拉线性素数筛)
Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...
随机推荐
- url查询参数解析
url查询参数解析 1.获取url的各部分值 举例http://i.cnblogs.com/EditPosts.aspx?opt=1 1.window.location.href(设置或获取整个 UR ...
- linux驱动开发(四) 字符设备驱动框架(自动创建设备节点)
代码如下 #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> # ...
- span标签 宽度无效解决方案
完美的解决方案 下 面代码的CSS定义完美解决了span的宽度设置问题. 由于浏览器通常对不支持的CSS属性采取忽略处理的态度, 所以最好将display:inline -block行写在后面,这样在 ...
- html页面调用servlet中文乱码问题
1.需要在html中:<meta charset=utf-8" /> 2.在servlet的doPost方法中 首先:response.setContentType(" ...
- Unable to locate Spring NamespaceHandler for XML schema namespace
1. 问题 本文将讨论Spring中最常见的配置问题 —— Spring的一个命名空间的名称空间处理程序没有找到. 大多数情况下,是由于一个特定的Spring的jar没有配置在classpath下,让 ...
- mysql 设置多个字段聚合自增
DROP TEMPORARY TABLE IF EXISTS ttp_firstInvest; CREATE TEMPORARY TABLE ttp_firstInvest ( userid varc ...
- 在CentOS7中利用yum命令安装mysql
在CentOS7中利用yum命令安装mysql 原创 2016年08月31日 10:42:33 标签: mysql / centos 4832 一.说明 我们是在VMware虚拟机上安装的mysql, ...
- Mybatis动态sql及性能优化-3
内容简介 1.回顾 2.动态sql 3.性能优化 懒加载机制 一级缓存 二级缓存 一.回顾 1.config文件常用标签 properties标签:引入外部properties文件资源. settin ...
- 网络层——IP报文头介绍
IP数据包也叫IP报文分组,传输在ISO网络7层结构中的网络层,它由IP报文头和IP报文用户数据组成,IP报文头的长度一般在20到60个字节之间,而一个IP分组的最大长度则不能超过65535个字节. ...
- C++学习一explicit
explicit关键字 C++中的关键字explicit主要是用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换.类构造函数默认情况下声明为隐式的即i ...