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 ...
随机推荐
- chrome也可以整张网页截图,保存完整网页为图片
转自:http://www.webkaka.com/blog/archives/chrome-save-a-webpage.html 关于浏览器截图,一直以为Chrome无能为力,最近发现,原来Chr ...
- Windows环境安装Django步骤
前提:已经安装Python 1.先从Django官网下载压缩包:https://www.djangoproject.com/download/ 2.解压Django,如我解压到 D:\Python\D ...
- 详述 IntelliJ IDEA 插件的安装及使用方法
首先,进入插件安装界面: Mac:IntelliJ IDEA -> Preferences -> Plugins; Windows:File -> Settings -> Pl ...
- android的特点有哪些
android拥有完善的应用程序框架,支持4大应用组件activity,service,contentProvider,broadcast,可以在任意层次上进行复用和更换: android中java字 ...
- 爬虫--selenuim和phantonJs处理网页动态加载数据的爬取
1.谷歌浏览器的使用 下载谷歌浏览器 安装谷歌访问助手 终于用上谷歌浏览器了.....激动 问题:处理页面动态加载数据的爬取 -1.selenium -2.phantomJs 1.selenium 二 ...
- css3 之border-radius 属性解析
在css 设置样式的时候,有时候会用到将元素的边框设置为圆形的样子的时候,一般都是通常直接设置:{border-radius:5px },这样就行了,但是到底是什么意思,一直以来都没有弄明白,只是知道 ...
- JSP基本_EL式
1.EL式下記二種類がある.① ${式} : JSPの出力(レンダリング)時に評価 (JSP2.0から)② #{式} : タグハンドラにより任意のタイミングで評価 (JSP2.1から) 2.オブジェク ...
- Android构建项目时出现的小bug们(2018年5月19日19:31:20)
问题详情 Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conflict with dependency ...
- 学JS的心路历程-函式(五)箭头函式
箭头函式arrow function 为了能够以更简短的方式建立函式,ES6变推出了箭头函式. 用说明的可能会不太懂,我们先拿之前的数组排序例子来看: var arr = [2,1,6,12,3,77 ...
- apicloud监听返回键(安卓试过)
下面监听写在apiready里面 api.addEventListener({ //使用下方函数此处好像失效了 name: 'keyback' }, function(ret, err) { aler ...