POJ Prime Path 埃氏筛法+广度优先搜索

news/2024/11/24 18:28:09/

思路:用埃氏筛法打个表,然后bfs即可

#include <iostream>
#include <queue>
using namespace std;
typedef long long ll;
ll inf = 0x3f3f3f3f3f3f3f3f;
bool isPrime[10007];
ll d[10007];
int tenPow[10];
int mint;
void initTenPow()
{tenPow[0] = 1;for (int i = 1; i <= 7; i++){tenPow[i] = tenPow[i - 1] * 10;}
}
void sieve()
{for (int i = 0; i <= 10000; i++){isPrime[i] = true;}isPrime[0] = false, isPrime[1] = false;for (int i = 1; i * i <= 10000; i++){if (!isPrime[i]){continue;}for (int j = 2 * i; j <= 10000; j += i){isPrime[j] = false;}}
}
void init()
{for (int i = 1000; i <= 9999; i++){d[i] = inf;}
}
void bfs(int start)
{queue<int> que;que.push(start);d[start] = 0;while (!que.empty()){int p = que.front();que.pop();for (int i = 1; i <= 4; i++){for (int j = 0; j <= 9; j++){if (i == 1 && j == 0){continue;}int q = (p / tenPow[5 - i]) * tenPow[5 - i] + (j * tenPow[4 - i]) + (p % tenPow[4 - i]);if (isPrime[q] && d[p] + 1 < d[q]){d[q] = d[p] + 1;que.push(q);}}}}
}
int main()
{initTenPow();sieve();int t, p, q;scanf("%d", &t);while (t--){init();scanf("%d%d", &p, &q);bfs(p);printf("%lld\n", d[q]);}return 0;
}


http://www.ppmy.cn/news/1036923.html

相关文章

使用冒泡排序模拟qsort

目录 冒泡排序&#x1f412;&#xff1a; 冒泡排序特点&#x1f440;&#xff1a; 模拟&改造&#x1f527;&#xff1a; 1、让冒泡排序能够接受其他的数据类型&#xff0c;使用参数的改造。&#x1f697; 2、比较的方式进行改造❤ 思路分析&#x1f9e0;&#xff1a;…

SQLite数据库实现数据增删改查

当前文章介绍的设计的主要功能是利用 SQLite 数据库实现宠物投喂器上传数据的存储&#xff0c;并且支持数据的增删改查操作。其中&#xff0c;宠物投喂器上传的数据包括投喂间隔时间、水温、剩余重量等参数。 实现功能&#xff1a; 创建 SQLite 数据库表&#xff0c;用于存储宠…

前端JavaScript企业框架的全面解析

引言 在现代Web开发中&#xff0c;前端JavaScript框架扮演着至关重要的角色。它们提供了丰富的功能和工具&#xff0c;帮助开发人员构建功能强大且易于维护的企业级应用程序。本篇博客将全面解析前端JavaScript企业框架&#xff0c;介绍其优势、使用场景和常见的框架选择。 什…

力扣初级算法(数组拆分)

力扣初级算法&#xff08;数组拆分&#xff09; 每日一算法&#xff1a; 力扣初级算法&#xff08;数组拆分&#xff09; 学习内容&#xff1a; 1.问题描述 给定长度为 2n 的整数数组 nums &#xff0c;你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) …

Java基础(十三)面向对象编程 OOP

Java面向对象基础知识笔记&#xff08;二&#xff09; 1. this关键字 this 关键字代表当前对象的引用&#xff0c;可以用于访问当前对象的成员变量、成员方法和构造方法。在以下情况下常用到 this&#xff1a; 使用 this 调用成员变量&#xff0c;解决成员变量与局部变量的同…

第八章 CUDA内存应用与性能优化篇(上篇)

cuda教程目录 第一章 指针篇 第二章 CUDA原理篇 第三章 CUDA编译器环境配置篇 第四章 kernel函数基础篇 第五章 kernel索引(index)篇 第六章 kenel矩阵计算实战篇 第七章 kenel实战强化篇 第八章 CUDA内存应用与性能优化篇 第九章 CUDA原子(atomic)实战篇 第十章 CUDA流(strea…

Spring学习笔记之Bean的“出生入死”

文章目录 什么是Bean的生命周期为什么要知道Bean的生命周期Bean的生命周期之五个阶段Bean生命周期之七个阶段Bean生命周期的十个阶段Bean的作用域不同&#xff0c;管理方式不同自己new的对象如何让Spring管理 什么是Bean的生命周期 Spring其实就是一个管理Bean对象的工厂。它负…

Java多线程(4)---死锁和Synchronized加锁流程

目录 前言 一.synchronized 1.1概念 1.2Synchronized是什么锁&#xff1f; 1.3Synchronized加锁工作过程 1.4其他优化操作 二.死锁 2.1什么是死锁 2.2死锁的几个经典场景 2.3死锁产生的条件 2.4如何解决死锁 &#x1f381;个人主页&#xff1a;tq02的博客_CSDN博客…