【米勒拉宾模板】Palindromic Primes
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相关推荐
- C++米勒拉宾算法模板
//我也忘了从哪找来的板子,不过对于2^63级的数据请考虑使用java内置的米勒拉宾算法. 1 #include <iostream> 2 #include <string> ...
- 费马素性测试和米勒—拉宾素性测试
chapter 1 Fermat's little theorem 费马小定理 费马小定理说的是:如果p是一个素数,那么对于任意一个整数a,a p − a 能被p整除,也可以用模运算表示如下: (p是 ...
- 【学习笔记】Miller-Rabin(米勒-拉宾)素性测试,附常用表
@TOC 素性测试是检验一个给定的整数是否为素数的测试. 最简单的就是用 n\sqrt{n}n 以内的数去试除.这是确定性的算法,即能准确知道 nnn 是否为质数. 但今天学习的是一种随机算法. F ...
- 米勒-拉宾(MillerRabbin)素性测试算法
原创滴博客~https://www.cnblogs.com/precious-ZPF/p/9481599.html 小编赶紧摘过来的,多看几遍向银家多学习学习QAQ 首先,在了解米勒-拉宾素性测试之前 ...
- C++实现伪大素数生成算法(费马小定理判别法、米勒拉宾素数判定法)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.伪大素数生成原理 方法一 方法二 数学基础 二.费马小定理判别法 1.算法 2.代码实现 3.运行结果 二.米勒拉宾素数 ...
- 数论 判断素数:普通素数判别 线性筛 二次筛法求素数 米勒拉宾素数检验
普通的素数判断法 当我们要判断一个数字是否是素数的时候,往往会直接看这个数字模1到这个数字的根号,看有没有等于零的,从而判断这个数字是不是素数,这样做的时间复杂度为O(sqrt(n)) bool is ...
- 你知道如何判定一个大整数为素数吗?——米勒拉宾素数判定算法
米勒拉宾算法的基本概念如下: 首先判断这个数n的奇偶性 若为偶数仅有2是质数 奇数则进入测试 测试方法: 首先确定几个基底a,范围在[2,n-1] 因为n是奇数,所以n-1必定为偶数 则n-1可以表示 ...
- 米勒-拉宾素性检测算法
米勒-拉宾素性检测就是目前应用比较广的一种随机化素性检测算法. 它是基于下面两个定理: (费马小定理)如果 p 为素数,且 a 无法被 p 整除,则对于所有大于0小于 p 的整数 a,有 ap−1≡1 ...
- 2018宁夏网络赛 B Goldbach (米勒拉宾素数测试)
2018宁夏网络赛 B Goldbach (米勒拉宾素数测试) 题目链接 题目大意: 给你一个偶数n (2<n<=1e18) 让你把n分解成两个素数的和.(如果有多个输出任意一个) 解题思 ...
- 算个欧拉函数给大家助助兴(米勒拉宾(判断素数)+Pollard_rho(求一个大数的因子 ))
这篇博客讲的很好: https://www.cnblogs.com/ZERO-/p/9302169.html 题目描述 木南有一天学习了欧拉函数,知道了对正整数n,欧拉函数是小于n的正整数中与n互质的 ...
最新文章
- SegmentFault Hackathon 2018 火热登场,Let's hack!
- Vue2.0配置mint-ui踩过的那些坑
- 风投报告:2017下半年VR/AR娱乐领域投资额同比上升79% 【52翻译】
- Altium designer—STM32F103ZET6最小系统PCB图
- python函数的使用方法_百度资讯搜索_python函数的使用方法
- mocha 测试 mysql_node项目mocha自动化测试的疑问
- 2020年创业公司到底过得怎么样?数据分析来为你揭晓
- Web前端三大主流框架是什么?Web前端前景与就业形势
- linux查看消息队列的状态,linux – 如何知道某个时间点在消息队列中收到的消息数...
- 当有多个table.render时,如何判断全部加载完毕
- 【转】Python基础-字符串
- Shell脚本之awk详解
- 最长重复子字符串:123321||12321
- linux下面用ssh替代rsh
- python按字母顺序排列_在python中检查字符串是否按字母顺序排列
- 手机便签怎么导出到另一个手机 便签内容一键传输方法
- 将任意文件转换为Pcap网络数据包传输
- 高等数学(第七版)同济大学 习题9-4 (前11题)个人解答
- SQL Server 数据库中数据库表导出为Excel表格
- 采用亥姆霍兹线圈进行稀土永磁性能测量
热门文章
- php 抽奖系统源码下载,魔众砸金蛋抽奖系统PHP源码 v2.0.0
- java home websphere_websphere6.1安装与配置
- 控制器c语言编程,如何用C语言对DMA控制器编程 - 全文
- PHP1c型GNAS,【临床研究与实践】儿童假性甲状旁腺功能减退症20例临床特征与GNAS基因缺陷分析...
- 用计算机计算数学公式,Formula Calculator公式计算器
- #天府TV#《什么是成都》爆红背后,还有上千热泪盈眶留言!
- 论文必备:深度学习中的网络结构是怎么画的
- feignclient time out
- 福大软工 · 真 · 最终作业
- SpringBoot线程池获取service实例空指针