【数论】Prime Time UVA - 10200 大素数 Miller Robin 模板
题意:验证1~10000 的数 n^n+n+41 中素数的个数。每个询问给出a,b 求区间[a,b]中质数出现的比例,保留两位
题解:质数会爆到1e8 所以用miller robin ,
另外一个优化是预处理
一个坑是四舍五入卡精度。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<ctime>
using namespace std;
typedef long long ll;
const int MAXN = + + ;
const int maxn = MAXN;
#define rep(i,t,n) for(int i =(t);i<=(n);++i)
#define per(i,n,t) for(int i =(n);i>=(t);--i)
#define mmm(a,b) memset(a,b,sizeof(a))
int phi[MAXN], prime[MAXN];
struct Miller_Rabin
{
int prime[] = { ,,,, };
ll qmul(ll x, ll y, ll mod) {
ll ans = (x*y - (ll)((long double)x / mod * y + 1e-)*mod);
ans = (ans%mod + mod) % mod;
return ans;
}
ll qpow(ll x, ll n, ll mod) {
ll ans = ;
while (n) {
if (n & ) ans = qmul(ans, x, mod);
x = qmul(x, x, mod);
n >>= ;
}
return ans;
}
bool isprime_std(ll p) {
if (p < ) return ;
if (p != && p % == ) return ;
ll s = p - ;
while (!(s & )) s >>= ;
for (int i = ; i < ; ++i) {
if (p == prime[i]) return ;
ll t = s, m = qpow(prime[i], s, p);
while (t != p - && m != && m != p - ) {
m = qmul(m, m, p);
t <<= ;
}
if (m != p - && !(t & )) return ;
}
return ;
}
bool isprime(ll p) {
if (p< || (p != && p % == )) return false;
for (int i = ; i < ; ++i)
{
if (p == prime[i]) return true;
ll t = qpow(prime[i], p - , p);
if (t != ) return false;
}
return true;
}
}mr;
int tot;
void get_phi()
{
phi[] = ;
for (int i = ; i <= MAXN - ; i++) {
if (!phi[i]) {
phi[i] = i - ;
prime[++tot] = i;
}
for (int j = ; j <= tot && 1LL * i*prime[j] <= MAXN - ; j++) {
if (i%prime[j]) phi[i*prime[j]] = phi[i] * (prime[j] - );
else {
phi[i*prime[j]] = phi[i] * prime[j];
break;
}
}
}
}
int isntp[maxn];
void sieve(int n) {
int m = (int)sqrt(n + 0.5);
mmm(isntp, );
rep(i, , m)if (!isntp[i])for (int j = i * i; j <= n; j += i)isntp[j] = ; }
int ans[maxn];
int s[maxn];
int smain();
//#define ONLINE_JUDGE
int main() { //ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
FILE *myfile;
myfile = freopen("C:\\Users\\acm-14\\Desktop\\test\\b.in", "r", stdin);
if (myfile == NULL)
fprintf(stdout, "error on input freopen\n");
FILE *outfile;
outfile = freopen("C:\\Users\\acm-14\\Desktop\\test\\out.txt", "w", stdout);
if (outfile == NULL)
fprintf(stdout, "error on output freopen\n");
long _begin_time = clock();
#endif
smain();
#ifndef ONLINE_JUDGE
long _end_time = clock();
printf("time = %ld ms.", _end_time - _begin_time);
#endif
return ;
}
int smain()
{ int t;
int a, b; s[] = ;
rep(i, , 1e4) {
if (mr.isprime_std(i * i + i + ))s[i] = s[i - ] + ;
else s[i] = s[i - ];
}
while (cin >> a >> b)
{
int cnt = ;
/*rep(i, a, b) {
if (i * i + i + 41 < 1e7) {
if (isntp[i * i + i + 41] == 0)cnt++;
else if(mr.isprime(i * i + i + 41))cnt++;
}
}*/
cnt = s[b];
if (a != )cnt -= s[a - ];
double ans = (double)cnt / (double)(b - a + ) * ;
ans = (double)((int)(ans + 0.50000001)); printf("%.2lf\n", ans/);
}
//cin >> t;
return ;
}
/*
0 39
0 40
39 40
*/
【数论】Prime Time UVA - 10200 大素数 Miller Robin 模板的更多相关文章
- Prime Time UVA - 10200(精度处理,素数判定)
Problem Description Euler is a well-known matematician, and, among many other things, he discovered ...
- [ACM] POJ 2689 Prime Distance (筛选范围大素数)
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12811 Accepted: 3420 D ...
- Project Euler 97 :Large non-Mersenne prime 非梅森大素数
Large non-Mersenne prime The first known prime found to exceed one million digits was discovered in ...
- FZU 1649 Prime number or not米勒拉宾大素数判定方法。
C - Prime number or not Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & % ...
- Miller Robin大素数判定
Miller Robin算法 当要判断的数过大,以至于根n的算法不可行时,可以采用这种方法来判定素数. 用于判断大于2的奇数(2和偶数需要手动判断),是概率意义上的判定,因此需要做多次来减少出错概率. ...
- POJ 1811 大素数判断
数据范围很大,用米勒罗宾测试和Pollard_Rho法可以分解大数. 模板在代码中 O.O #include <iostream> #include <cstdio> #inc ...
- Miller_Rabbin大素数测试
伪素数: 如果存在和n互素的正整数a满足a^(n-1)≡1(mod n),则n是基于a的伪素数. 是伪素数但不是素数的个数是非常非常少的,所以如果一个数是伪素数,那么他几乎是素数. Miller_Ra ...
- 计蒜客 18492.Upside down primes-米勒拉宾判大素数 (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 K)
K. Upside down primes 传送门 这个题就是把大数按字符串输进去,判断一下是不是素数,然后反转180度,先判断反转之后的东西是不是一个数,如果是的话,再把这个数判一下是不是素数,如果 ...
- 重复造轮子之RSA算法(一) 大素数生成
出于无聊, 打算从头实现一遍RSA算法 第一步, 大素数生成 Java的BigInteger里, 有个现成的方法 public static BigInteger probablePrime(int ...
随机推荐
- 【Windows】Windows中解析DOS的for命令使用
目录结构: contents structure [+] 简介 for /d ... in ... 案例 案例:打印C://根目录下所有的文件夹名称 案例:打印当前路径下,只有1-3个字母的文件夹名 ...
- 12C配置EM Express的https端口
1.启动监听并查看监听信息 $ lsnrctl stat ora12 LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 07-FEB-2017 ...
- BigDecimal乘法
BigDecimal result = new BigDecimal(doubleValue).multiply(factor2); public class Payment { BigDecimal ...
- 详解shell编程中2>&1用法
在使用 linux 命令或者 shell 编程时,这个用法常会遇到 2>&1 下面看一个命令示例,然后分析下他是如何工作的: ls foo > /dev/null 2>&am ...
- Atitit php vs node.js attilax总结
Atitit php vs node.js attilax总结 1.1. 上手度 还是php 1 1.2. Node.js最大的缺点 异步回调导致可读性差..特别嵌套的时候.. 1 1.1. 上手 ...
- MAC OS X显示.开头的文件_苹果操作系统显示隐藏文件命令
转自:http://dditblog.com/blog_446.html 今天在导入Eclipse项目的时候.发现导入不了.初步估计是因为项目没有.project的文件.在Mac OS X操作系统下面 ...
- pandas数组(pandas Series)-(5)apply方法自定义函数
有时候需要对 pandas Series 里的值进行一些操作,但是没有内置函数,这时候可以自己写一个函数,使用 pandas Series 的 apply 方法,可以对里面的每个值都调用这个函数,然后 ...
- 关于uframe源码的一些解读
游戏管理. GameManager单例:绑定在不同的gameobject上,还是会每次都实例化一个GameManager但是可以为每一个GameManager赋值一个已经存在的单例---------- ...
- ArcGIS Runtime SDK for iOS之符号和渲染
符号定义了图形外观的非地理方面.它包括了图形的颜色.线宽.透明度等等.ArcGIS Runtime SDK for iOS包含了许多符号类,其中的每个类可以让你以独特的方式指定符号.每个符号的类型也是 ...
- Json Web Token(JWT)
Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(Si ...