http://acm.hdu.edu.cn/showproblem.php?pid=2138

题意:给n个数判断有几个素数。(每个数<=2^32)

#include <cstdio>
using namespace std;
typedef long long ll;
ll ipow(ll a, ll b, ll m) { ll x=1; for(; b; b>>=1, (a*=a)%=m) if(b&1) (x*=a)%=m; return x; }
ll rand(ll a, ll b) {
static const ll M=1e9+7, g=154865266;
static ll now=1283901ll;
return a+((now*=g)%=M)%(b-a+1);
}
bool check(ll x) {
if(x==2 || x==3 || x==5 || x==7 || x==11 || x==13) return 1;
if(x<2 || (x&1)==0 || (x%3)==0 || (x%5)==0 || (x%7)==0 || (x%11)==0 || (x%13)==0) return 0;
int cnt=0;
ll d=x-1; while((d&1)==0) d>>=1, ++cnt;
for(int T=1; T<=50; ++T) {
int a=rand(2, x-1);
ll t=ipow(a, d, x), pre;
for(int i=1; i<=cnt; ++i) { pre=t; (t*=t)%=x; if(t==1 && pre!=1 && pre!=x-1) return 0; }
if(t!=1) return 0;
}
return 1;
}
int main() {
int n;
while(~scanf("%d", &n)) {
int ans=0;
for(int i=1; i<=n; ++i) { int a; scanf("%d", &a); if(check(a)) ++ans; }
printf("%d\n", ans);
}
return 0;
}

  

学习了素数检测= =Miller-Rabin...复杂度$O(k log^3 n)$,k是选的$a$的个数

其实基于两个定理:费马小定理和二次探测...

首先如果$n$是奇素数,那么显然对于所有的$1 \le a < n$,都有$a^{(n-1)} \equiv 1 \pmod{n}$,那么我们马上可以得到一个暴力算法= =(比枚举约数还慢系列= =

然后用那啥二次探测定理然后随机选一些$a$然后一定概率来检测$n$= =(听说单次检测是$3/4$的概率= =那么多次检测成功率很高= =$n$次的能检测出来的概率就是$1 - \left( \frac{1}{4} \right) ^n$

二项探测就是指如果$n$是素数,则$x^2 \equiv 1 \pmod{n}, 0<=x<n$的只有就是$x = 1 或 x = n-1$

证明:容易得到$p | (x+1)(x-1)$。而由于$p$是质数,所以$(x+1)$和$(x-1)$中至少一个被$p$整除。那么容易得到$x = \pm 1$,即$x \equiv 1 或 x \equiv n-1$

然后我们就将$n-1$分解成$2^sd$其中$d$为奇数。这样我们从$a^d$开始向上算,每一次平方一次,如果等于$1$而上一次却不等于$\pm 1$,那么为合数。

【HDU】2138 How many prime numbers的更多相关文章

  1. 【HDU】2866:Special Prime【数论】

    Special Prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  2. 【POJ2739】Sum of Consecutive Prime Numbers

    简单的素数打表,然后枚举.开始没注意n读到0结束,TLE了回..下次再认真点.A过后讨论里面有个暴力打表过的,给跪了! #include <iostream> #include <c ...

  3. 【HDU】4888 Redraw Beautiful Drawings 网络流【推断解是否唯一】

    传送门:pid=4888">[HDU]4888 Redraw Beautiful Drawings 题目分析: 比赛的时候看出是个网络流,可是没有敲出来.各种反面样例推倒自己(究其原因 ...

  4. 【LeetCode】201. Bitwise AND of Numbers Range 解题报告(Python)

    [LeetCode]201. Bitwise AND of Numbers Range 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/prob ...

  5. HDU 2138 How many prime numbers(Miller_Rabin法判断素数 【*模板】 用到了快速幂算法 )

    How many prime numbers Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  6. HDOJ(HDU) 2138 How many prime numbers(素数-快速筛选没用上、)

    Problem Description Give you a lot of positive integers, just to find out how many prime numbers the ...

  7. 【HDU】2191 多重背包问题

    原题目:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 [算法]多重背包(有限背包) 动态规划 [题解]http://blog.csdn.net/acdreamers/article/detail ...

  8. 【HDU】6110 路径交(2017百度之星) 线段树+RMQ-LCA+树链的交

    [题目]2017"百度之星"程序设计大赛 - 初赛(A) [题意]给定n个点的带边权树,m条编号1~m的路径,Q次询问编号区间[L,R]所有链的交集的长度.n<=500000 ...

  9. 【HDU】6148 Valley Numer 数位DP

    [算法]数位DP [题意]定义V-number为从左到看单位数字未出现先递增后递减现象的数字,求0~N中满足条件的数字个数.T<=200,lenth(n)<=100 [题解]百度之星201 ...

随机推荐

  1. Pyqt 以OOP方式动画的效果改变自身窗体大小

    代码: # -*- coding:utf8 -*- from PyQt4.QtGui import * from PyQt4.QtCore import * import sys class ani( ...

  2. qsort函数详解

    C语言标准库函数 qsort 详解 文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作. 原文链接:http://www.slyar.c ...

  3. 基于VLC的播放器开发

    VLC的C++封装 因为工作需要,研究了一段时间的播放器开发,如果从头开始做,可以学习下FFmpeg(http://www.ffmpeg.org/),很多播放器都是基于FFmpeg开发的,但是这样工作 ...

  4. Oracle【IT实验室】数据库备份与恢复之五:Flashback

    Flashback在开发环境(有时生产环境的特殊情况下)是很有用的一个工具.     5.1 9i Flashback 简介     5.1.1  原理 当数据  update  或  delete  ...

  5. Oracle【IT实验室】数据库备份与恢复之四:RMAN(备份与恢复管理器)

    RMAN是ORACLE提供的一个备份与恢复的工具,可以用来备份和还原数据库文件. 归档日志和控制文件.它也可以用来执行完全或不完全的数据库恢复. RMAN可以由命令行接口或者 OEM的 Backup ...

  6. MicroService/web Service/webAPI/RPC

    [TOC] 微服务 服务拆分,利用轻量化机制(通常为HTTP源API)实现通信,复杂度可控,独立部署,技术选型灵活,容错,扩展. 康威定律的实际体现 微服务架构模式深刻影响了应用和数据库之间的关系,不 ...

  7. Win7系统怎么开启远程桌面?Win7远程桌面怎么用(转)

    远程桌面服务开启之后,可以方便的远程管理服务器或计算机.为生活和工作带来不少便利呢,很多小伙伴还不知道怎么开启win7远程桌面吧(下面咗嚛以内网远程桌面为例)   工具/原料 Win7 Win7远程桌 ...

  8. ios广告

    ios广告只需要添加iAd.framework框架 添加广告控件ADBannerView,在控制器中设置广告控件代理<ADBannerViewDelegate>即可,广告会有苹果官方自动推 ...

  9. JQuery常用函数及功能小结--转载

    1.文档加载完成执行函数 $(document).ready(function(){  alert("开始了"); }); 2.添加/删除CSS类 $("#some-id ...

  10. Arduino101学习笔记(八)—— 函数库

    /*********最小值*********/ min() //实现:#define min(a,b) ((a)<(b)?(a):(b)) /*********最大值*********/ max ...