HDU 2138 How many prime numbers (判素数,米勒拉宾算法)
2024-08-27 08:27:12
题意:给定一个数,判断是不是素数。
析:由于数太多,并且太大了,所以以前的方法都不适合,要用米勒拉宾算法。
代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <map>
#include <cctype> using namespace std;
typedef long long LL;
const int maxn = 1000 + 5; LL qpow(int a, int b, int r){
LL ans = 1;
LL k = a % r;
while(b){
if(b & 1) ans = (ans * k) % r;
k = (k * k) % r;
b >>= 1;
}
return ans;
} bool miller_rabbin(int n, int a){
int r = 0,s = n-1;
if(!(n % a)) return false;
while(!(s & 1)){ s >>= 1; ++r; } LL k = qpow(a, s, n);
if(1 == k) return true;
for(int j = 0; j < r; ++j, k = k * k % n)
if(k == n-1) return true;
return false;
} bool is_prime(int n){
int tab[] = {2, 3, 5, 7};
for(int i = 0; i < 4; ++i){
if(n == tab[i]) return true;
if(!miller_rabbin(n, tab[i])) return false;
}
return true;
} int main(){
// freopen("in.txt", "r", stdin);
int n, x;
while(~scanf("%d", &n)){
int cnt = 0;
for(int i = 0; i < n; ++i){
scanf("%d", &x);
if(is_prime(x)) ++cnt;
}
printf("%d\n", cnt);
}
}
最新文章
- Python脚本调用Django内容
- Java:文件类File的详解
- DBMS_RLS包实现数据库表中的行级安全控制
- 第二、UIScrollView的使用大全
- nginx(2)
- ehcache memcache redis 区别
- Angular--ui-router的使用
- Alpha冲刺Day8
- JS33个概念
- lambda expressions
- [No0000DC]C# FileHelper 本地文件、文件夹操作类封装FileHelper
- CAS锁相关讲解
- Centos 7 RabbitMQ + Haproxy 集群高可用部署
- selenium +chrome headless Manual 模式渲染网页
- 微软、谷歌、亚马逊、Facebook等硅谷大厂91个开源软件盘点(附下载地址)
- JavaScript权威指南--事件处理
- [转]C# 系统应用之鼠标模拟技术及自动操作鼠标
- 【洛谷】【洛谷月赛】4月月赛Round 1/2
- 移动端优化 &;&; 清除移动端网站点击a标签时闪现的边框或遮罩层(CSS) &;&; 移动端点击 &;&; 文字不可选择
- PHP调用百度api生成短网址&;根据短网址恢复长网址
热门文章
- Java对字符串使用MD5进行加密(亲测有效)
- oracle惯用缩写的含义
- Vote Disk 和 OCR概述
- maven GroupId 和ArtifactId通常填什么
- pyspark dataframe 格式数据输入 做逻辑回归
- Fb 第三方接口
- frm和ibd恢复sql文件的操作
- org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]
- virtualbox Linux与Windows共享文件
- PAT L2-008 最长对称子串(模拟字符串)