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

题目链接

题目大意:

给你一个偶数n (2<n<=1e18)
让你把n分解成两个素数的和。(如果有多个输出任意一个)

解题思路:

米勒拉宾素数测试板子
这个板子可以在 log 级的时间内判断一个数是不是素数。 用于判断大数是不是素数。

AC代码:

#include<bits/stdc++.h>
#define ll unsigned long long int
using namespace std;ll ModMul(ll a,ll b,ll n){//¿ìËÙ»ýÈ¡Ä£ a*b%nll ans=0;while(b){if(b&1)ans=(ans+a)%n;a=(a+a)%n;b>>=1;}return ans;
}
ll ModExp(ll a,ll b,ll n){  //¿ìËÙÃÝÈ¡Ä£ a^b%nll ans=1;while(b){if(b&1)ans=ModMul(ans,a,n);a=ModMul(a,a,n);b>>=1;}return ans;
}
bool miller_rabin(ll n){//Miller-RabinËØÊý¼ì²âËã·¨ll i,j,a,x,y,t,u,s=10;if(n==2)return true;if(n<2||!(n&1))return false;for(t=0,u=n-1;!(u&1);t++,u>>=1); //n-1=u*2^tfor(i=0;i<s;i++){a=rand()%(n-1)+1;x=ModExp(a,u,n);for(j=0;j<t;j++){y=ModMul(x,x,n);if(y==1&&x!=1&&x!=n-1)return false;x=y;}if(x!=1)return false;}return true;
}
int main()
{int t;ll n;scanf("%d",&t);while(t--){scanf("%lld",&n);if(n==4){printf("2 2\n");continue;}for(ll i=3;i<=n/2;i+=2){if(miller_rabin(i)&&miller_rabin(n-i)){printf("%lld %lld\n",i,n-i);break;}}}return 0;
}

2018宁夏网络赛 B Goldbach (米勒拉宾素数测试)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. [2018 徐州 网络赛|Hard to prepare ] 环形染色问题的公式解法

    题目来源 After Incident, a feast is usually held in Hakurei Shrine. This time Reimu asked Kokoro to deli ...

最新文章

  1. bootstrap 冻结表格,冻结表头
  2. Git 分布式版本控制系统
  3. 关于编译PCL1.71
  4. 论文学习5-NODE2BITS: Compact Time- and Attribute-aware Node Representations for User Stitching
  5. C语言 指针+二维数组详解 (应付期末、考研的最强笔记,建议收藏)
  6. css如何让a标签,根据输入的内容长度调整宽度,宽度自适应,那位大仙帮帮忙...
  7. Linux系统管理(5)——使用yum快速搭建LAMP环境【方便快捷版】
  8. 学python能做什么-学习python后能做哪方面的工作
  9. python解释器在语法上不支持什么编程_python解释器和编辑器的区别 - CSDN
  10. 猎豹浏览器_金山猎豹浏览器_官方正式版下载_首款双核安全浏览器
  11. oracle归档日志满了的处理方法
  12. 高并发的常见策略--大型web项目
  13. 教你用Python实现全自动刷网课
  14. 趣学python编程教孩子学编程_趣学Python——教孩子学编程
  15. 数据库建模多表一对多和多对一、一对一、多对多
  16. Mysql根据出生日期计算年龄
  17. Golang Gin Router冲突 conflicts with existing wildcard
  18. so easy 的 Vue3.0自定义指令(也搜一贼)
  19. 通信使用matlab三元码实验报告,Matlab仿真DSBSC信号与双极性不归零码通信原理实验报告二实验...
  20. Java freemarker 生成word文档

热门文章

  1. java农夫过河_C语言实现农夫过河代码及解析
  2. RealView MDK开发工具
  3. 360 mysql读写分离_mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
  4. 迁移学习(Transfer Learning)的背景、历史
  5. c#上传文件并将word pdf转化成txt存储并将内容写入数据库
  6. 计算机与昆虫关系的论文,趣味昆虫学论文 昆虫与人类的关系
  7. 拉勾网企业招聘信息分析报告
  8. 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础
  9. 网口灯电路——反相器
  10. 植物大战僵尸:代码实现自动收集阳光