hdu2138 Miller_Rabin
Description
Input
Output
Sample Input
3
2 3 4
Sample Output
2
【题目简述】输入一个n和n个int32整数,询问其中有多少个质数,有多组数据
【题解】
有的时候我们需要快速判断一个数是不是质数
这时候我们需要使用miller-rabin算法
首先,根据费马小定理
我们认识到若p是质数
则a^p=a(mod p)
于是我们使用一个推广的结论
“记n=a*2^b,在[1,n)中随机选取一个整数x,如果x^a ≡1或x^(a*2^i) ≡-1(其中0<=i<b),那么我们认为n是质数。”——ysy
如果这样判断,我们会发现有1/4的概率出错
我们多判断几次即可
除非你是宇宙无敌非洲人
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<queue>
#include<map>
#include<vector>
#include<set>
#define il inline
#define re register
using namespace std;
typedef long long ll;
int T;
ll n,ans=,a,b;
il int ran(){
return rand()*rand()+rand();
}
il ll pow(ll base,ll pow){
ll ans=;
for(;pow;pow>>=){
if(pow&) ans=ans*base%n;
base=base*base%n;
}
return ans;
}
il bool chk(){
ll x=ran()%(n-)+,now=pow(x,a);
if(now==) return true;
for(int i=;i<b;i++){
if(now==n-) return true;
now=now*now%n;
}
return false;
}
il bool isprime(){
a=n-;b=;
while(a%==){
a/=;b++;
}
for(int i=;i<=;i++)
if(!chk()) return false;
return true;
}
il void init(){
srand(T);ans=;
for(int i=;i<=T;i++){
cin>>n;
ans+=isprime();
}
cout<<ans<<endl;
}
int main(){
while(scanf("%d",&T)!=EOF){
init();
}
return ;
}
hdu2138 Miller_Rabin的更多相关文章
- HDU2138 素数判定
HDU2138 给定N个32位大于等于2的正整数 输出其中素数的个数 用Miller Rabin 素数判定法 效率很高 数学证明比较复杂,略过, 会使用这个接口即可. #include<iost ...
- hdu2138 How many prime numbers 米勒测试
hdu2138 How many prime numbers #include <bits/stdc++.h> using namespace std; typedef long long ...
- Miller_Rabin素数测试
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #inclu ...
- HDU2138 & 米勒拉宾模板
题意: 给出n个数,判断它是不是素数. SOL: 米勒拉宾裸题,思想方法略懂,并不能完全理解,所以实现只能靠背模板.... 好在不是很长... Code: /*==================== ...
- 【数论】Miller_Rabin
Miller_Rabin素数测试 Miller_Rabin判断单个素数的方法运用了费马小定理,可以说非常之快了. Miller_Rabin曾经被称作“黑科技”,但是根据费马小定理其实完 ...
- 数论 - Miller_Rabin素数测试 + pollard_rho算法分解质因数 ---- poj 1811 : Prime Test
Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29046 Accepted: 7342 Case ...
- 优化后的二次测试Miller_Rabin素性测试算法
ll random(ll n) { return (ll)((double)rand()/RAND_MAX*n + 0.5); } ll pow_mod(ll a,ll p,ll n) { ) ; l ...
- Miller_Rabin (米勒-拉宾) 素性测试
之前一直对于这个神奇的素性判定方法感到痴迷而又没有时间去了解.借着学习<信息安全数学基础>将素性这一判定方法学习一遍. 首先证明一下费马小定理. 若p为素数,且gcd(a, p)=1, 则 ...
- HDU-3864 D_num Miller_Rabin和Pollard_rho
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3864 题意:给定一个数n,求n的因子只有四个的情况. Miller_Rabin和Pollard_rho ...
随机推荐
- 阿里云centos7.4安装并部署svn1.10.0版本(配置多仓库,加入开机自启动)
如何安装最新版本 1.10.0: 如果已安装旧版本,先卸载 yum remove subversion* 查看当前可安装的版本 yum list | grep subversion 可以去官网下载安装 ...
- 【SIKIA计划】_10_Unity5.1UI系统-UGUI笔记
Canvas——TextEventSystem 事件系统 0.滚动文本列表(隐藏背景)/Scroll/maskimage[Scroll Rect][Mask]——text(拉伸到显示全部)Scroll ...
- NO 18---- webpack 4.x 使用遇到的问题以及开发配置
最近在项目中用webpack的过程中老是出现问题,很是纳闷,按理说一直这样使用没有问题啊,经过我研究后发现,是因为在webpack更新到4.x之后,操作方式与之前相比变化很大.而我们使用npm默认安装 ...
- PHP核心技术——反射
反射: 反射指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类.方法.属性.参数等的详细信息,包括注释.这种动态获取信息以及动态调用对象方法的功能称为反射API class person{ ...
- [linux] 利用PROMPT_COMMAND实现命令审计
网上查了实现命令审计大概有以下几种: 查不到了,改天再补充 以下环境基于CentOS 6 1.修改history时间格式 echo 'HISTTIMEFORMAT="%F %T " ...
- 原生JavaScript实现的贪吃蛇
github代码地址:https://github.com/McRayFE/snake 涉及到的知识点: 键盘事件 setInterval()定时器 javascript中数组的使用 碰撞的检测 of ...
- java实验五实验报告
一.实验内容 Cmp传输与加解密 结对编程,一人服务器,一人客户端,服务器向客户端发送经RSA加密的密钥和用密钥加密的密文(使用DES算法),客户端负责接收加密后的密钥和密文,并解密得出明文. 二.实 ...
- 校友聊---Sprint计划会议总结
1.产品需求及索引卡: 校友聊的软件我们计划分三步进行设计实现功能:文字聊天.语音聊天.视频聊天.首先第一步我们要实现文字聊天这个功能. 经过调研讨论之后,确定了产品的几个需求:在局域网内实现通信要依 ...
- linux 常用命令-ps命令
ps(process status):进程状态相关命令 1.
- Week-4-作业1
前言 经过了上周作业的学习拾遗,让我学到了很多东西,也能更好的阅读<构建之法>这本书,下面是我在阅读过第四章和第十七章之后想到的一些问题. 第四章 4.2.1 关于缩进,书中说用四个空格刚 ...