Problem: J . Palindromic Primes


记录个模板。
题目大意:
求 LLL 到 RRR 之间既是素数又是回文数的个数。

解题思路:
数据范围1e121e121e12。一般的前缀和做法解决不了。分析一下,对于一个回文数,都可以按位拆分成两部分。例如 123321123321123321,可以拆分为 123123123 和321321321 ,对于奇数位的整数12321,可以拆分为 123123123 和 212121,事实上,我们只要知道前半部分,后半部分就可以求出来,然后将前后两部分再凑到一起,判断其是否是素数即可。这样一来,对于庞大的 1e121e121e12 的范围,我们只需要枚举前1e61e61e6个数,就可以将 1e121e121e12 内所有的回文整数找出来了。
接下来只剩下判断素数了,怎样快速判断一个较大的数是否是素数呢?这里用到了一个稀奇古怪的算法米勒拉宾算法。
这里我就直接借模板一用啦。

AcCoding:

#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
ll qmul(ll a, ll b, ll p)
{ll c = (long double)a / p * b;ll res = (ull)a * b - (ull)c * p;return (res + p) % p;
}ll qpow(ll x, ll y, ll p)
{ll res = 1;while (y) {if (y & 1) res = qmul(res, x, p);x = qmul(x, x, p);y >>= 1;}return res;
}
bool isprime(ll x)
{if (x < 3) return x == 2;if (!(x & 1)) return false;ll A[] = { 0, 2, 325, 9375, 28178, 450775, 9780504, 1795265022 };ll d = x - 1, r = 0;while (d % 2 == 0){r++;d /= 2;}for (auto a : A){ll v = qpow(a, d, x);if (v <= 1 || v == x - 1) continue;for (int i = 1; i <= r; i++){v = qmul(v, v, x);if (v == x - 1 && i != r){v = 1;break;}if (v == 1)return false;}if (v != 1)return false;}return true;
}
void get(ll x,ll& sum1,ll& sum2) {vector<int> v;while (x) {v.push_back(x % 10);x /= 10;}sum1 = 0;sum2 = 0;//123reverse(v.begin(), v.end());for (int i = 0;i < v.size();i++) sum1 = sum1 * 10ll + v[i], sum2 = sum2 * 10ll + v[i];for (int i = v.size() - 2;i >= 0;i--) sum1 = sum1 * 10ll + v[i];for (int i = v.size() - 1;i >= 0;i--) sum2 = sum2 * 10ll + v[i];
}
int main() {ll l, r; scanf("%lld%lld", &l, &r);ll res = 0;for (ll i = 1;i <= 1000000;i++) {ll x, y;x = y = 0;get(i, x, y);if (min(x, y) > r) break;if (x >= l && x <= r && isprime(x)) res++;if (y >= l && y <= r && isprime(y)) res++;}printf("%lld", res);return 0;
}

【米勒拉宾模板】Palindromic Primes相关推荐

  1. C++米勒拉宾算法模板

    //我也忘了从哪找来的板子,不过对于2^63级的数据请考虑使用java内置的米勒拉宾算法. 1 #include <iostream> 2 #include <string> ...

  2. 费马素性测试和米勒—拉宾素性测试

    chapter 1 Fermat's little theorem 费马小定理 费马小定理说的是:如果p是一个素数,那么对于任意一个整数a,a p − a 能被p整除,也可以用模运算表示如下: (p是 ...

  3. 【学习笔记】Miller-Rabin(米勒-拉宾)素性测试,附常用表

    @TOC 素性测试是检验一个给定的整数是否为素数的测试. 最简单的就是用 n\sqrt{n}n​ 以内的数去试除.这是确定性的算法,即能准确知道 nnn 是否为质数. 但今天学习的是一种随机算法. F ...

  4. 米勒-拉宾(MillerRabbin)素性测试算法

    原创滴博客~https://www.cnblogs.com/precious-ZPF/p/9481599.html 小编赶紧摘过来的,多看几遍向银家多学习学习QAQ 首先,在了解米勒-拉宾素性测试之前 ...

  5. C++实现伪大素数生成算法(费马小定理判别法、米勒拉宾素数判定法)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.伪大素数生成原理 方法一 方法二 数学基础 二.费马小定理判别法 1.算法 2.代码实现 3.运行结果 二.米勒拉宾素数 ...

  6. 数论 判断素数:普通素数判别 线性筛 二次筛法求素数 米勒拉宾素数检验

    普通的素数判断法 当我们要判断一个数字是否是素数的时候,往往会直接看这个数字模1到这个数字的根号,看有没有等于零的,从而判断这个数字是不是素数,这样做的时间复杂度为O(sqrt(n)) bool is ...

  7. 你知道如何判定一个大整数为素数吗?——米勒拉宾素数判定算法

    米勒拉宾算法的基本概念如下: 首先判断这个数n的奇偶性 若为偶数仅有2是质数 奇数则进入测试 测试方法: 首先确定几个基底a,范围在[2,n-1] 因为n是奇数,所以n-1必定为偶数 则n-1可以表示 ...

  8. 米勒-拉宾素性检测算法

    米勒-拉宾素性检测就是目前应用比较广的一种随机化素性检测算法. 它是基于下面两个定理: (费马小定理)如果 p 为素数,且 a 无法被 p 整除,则对于所有大于0小于 p 的整数 a,有 ap−1≡1 ...

  9. 2018宁夏网络赛 B Goldbach (米勒拉宾素数测试)

    2018宁夏网络赛 B Goldbach (米勒拉宾素数测试) 题目链接 题目大意: 给你一个偶数n (2<n<=1e18) 让你把n分解成两个素数的和.(如果有多个输出任意一个) 解题思 ...

  10. 算个欧拉函数给大家助助兴(米勒拉宾(判断素数)+Pollard_rho(求一个大数的因子 ))

    这篇博客讲的很好: https://www.cnblogs.com/ZERO-/p/9302169.html 题目描述 木南有一天学习了欧拉函数,知道了对正整数n,欧拉函数是小于n的正整数中与n互质的 ...

最新文章

  1. SegmentFault Hackathon 2018 火热登场,Let's hack!
  2. Vue2.0配置mint-ui踩过的那些坑
  3. 风投报告:2017下半年VR/AR娱乐领域投资额同比上升79% 【52翻译】
  4. Altium designer—STM32F103ZET6最小系统PCB图
  5. python函数的使用方法_百度资讯搜索_python函数的使用方法
  6. mocha 测试 mysql_node项目mocha自动化测试的疑问
  7. 2020年创业公司到底过得怎么样?数据分析来为你揭晓
  8. Web前端三大主流框架是什么?Web前端前景与就业形势
  9. linux查看消息队列的状态,linux – 如何知道某个时间点在消息队列中收到的消息数...
  10. 当有多个table.render时,如何判断全部加载完毕
  11. 【转】Python基础-字符串
  12. Shell脚本之awk详解
  13. 最长重复子字符串:123321||12321
  14. linux下面用ssh替代rsh
  15. python按字母顺序排列_在python中检查字符串是否按字母顺序排列
  16. 手机便签怎么导出到另一个手机 便签内容一键传输方法
  17. 将任意文件转换为Pcap网络数据包传输
  18. 高等数学(第七版)同济大学 习题9-4 (前11题)个人解答
  19. SQL Server 数据库中数据库表导出为Excel表格
  20. 采用亥姆霍兹线圈进行稀土永磁性能测量

热门文章

  1. php 抽奖系统源码下载,魔众砸金蛋抽奖系统PHP源码 v2.0.0
  2. java home websphere_websphere6.1安装与配置
  3. 控制器c语言编程,如何用C语言对DMA控制器编程 - 全文
  4. PHP1c型GNAS,【临床研究与实践】儿童假性甲状旁腺功能减退症20例临床特征与GNAS基因缺陷分析...
  5. 用计算机计算数学公式,Formula Calculator公式计算器
  6. #天府TV#《什么是成都》爆红背后,还有上千热泪盈眶留言!
  7. 论文必备:深度学习中的网络结构是怎么画的
  8. feignclient time out
  9. 福大软工 · 真 · 最终作业
  10. SpringBoot线程池获取service实例空指针