2019HDU多校第三场F Fansblog——威尔逊定理&&素数密度
题意
给定一个整数 $P$($10^9 \leq p\leq 1^{14}$),设其前一个质数为 $Q$,求 $Q! \ \% P$.
分析
暴力...说不定好的板子能过。
根据威尔逊定理,如果 $p$ 为质数,则有 $(p-1)! \equiv p-1(mod \ p)$.
$\displaystyle Q! = \frac{(P-1)!}{(Q+1)(Q+2)...(p-1)} \equiv (p-1)*inv\ (mod \ P)$.
根据素数定理,$\displaystyle \pi (x) \sim \frac{x}{lnx}$,其中 $\pi (x)$ 表示不超过 $x$ 的素数的个数。直观的看,$x$ 越大,素数密度越大,接近线性。
在题给的范围,两个相邻素数通常只隔几十个数。
为了快速找到前一个质数,这里使用了Miller-Rabin素数测试算法(虽然题目 $\sqrt n$ 也能过
#include<bits/stdc++.h>
using namespace std; typedef long long int ll; ll mod_mul(ll a, ll b, ll mod)
{
ll res = ;
while (b)
{
if (b & )
res = (res + a) % mod;
a = (a + a) % mod;
b >>= ;
}
return res;
} ll mod_pow(ll a, ll n, ll mod)
{
ll res = ;
while (n)
{
if (n & )
res = mod_mul(res, a, mod);
a = mod_mul(a, a, mod);
n >>= ;
}
return res;
} // Miller-Rabin随机算法检测n是否为素数
bool Miller_Rabin(ll n)
{
if (n == )
return true;
if (n < || !(n & ))
return false;
ll m = n - , k = ;
while (!(m & ))
{
k++;
m >>= ;
}
for (int i = ; i <= ; i++) // 20为Miller-Rabin测试的迭代次数
{
ll a = rand() % (n - ) + ;
ll x = mod_pow(a, m, n);
ll y;
for (int j = ; j <= k; j++)
{
y = mod_mul(x, x, n);
if (y == && x != && x != n - )
return false;
x = y;
}
if (y != )
return false;
}
return true;
} ll mul(ll a, ll b, ll p)
{
ll res = ;
for(ll i = a;i <= b;i++) res = mod_mul(res, i, p);
return res;
} ll p, q;
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%lld", &p);
q = p-;
while(!Miller_Rabin(q)) q--;
ll inv = mod_pow(mul(q+, p-, p), p-, p);
ll ans = mod_mul(p-, inv, p);
printf("%lld\n", ans);
}
return ;
}
2019HDU多校第三场F Fansblog——威尔逊定理&&素数密度的更多相关文章
- 2019杭电多校第三场hdu6608 Fansblog(威尔逊定理)
Fansblog 题目传送门 解题思路 Q! % P = (P-1)!/(P-1)...(Q-1) % P. 因为P是质数,根据威尔逊定理,(P-1)!%P=P-1.所以答案就是(P-1)((P-1) ...
- 牛客多校第三场 F Planting Trees
牛客多校第三场 F Planting Trees 题意: 求矩阵内最大值减最小值大于k的最大子矩阵的面积 题解: 矩阵压缩的技巧 因为对于我们有用的信息只有这个矩阵内的最大值和最小值 所以我们可以将一 ...
- 2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)
题目:https://ac.nowcoder.com/acm/contest/883/F 题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m 思路:首先我们仔细观察范围,我 ...
- 2019牛客多校第三场 F.Planting Trees
题目链接 题目链接 题解 题面上面很明显的提示了需要严格\(O(n^3)\)的算法. 先考虑一个过不了的做法,枚举右下角的\((x,y)\),然后二分矩形面积,枚举其中一边,则复杂度是\(O(n^3 ...
- 2019HDU多校第三场 K subsequence——最小费用最大流
题意 给定一个 $n$ 个整数的数列,从中至多选取 $k$ 个上升子序列(一个元素最多被选一次),使得选取的元素和最大. 分析 考虑这个问题和经典网络流问题“最长不下降子序列”相似,我们考虑对这个建图 ...
- [2019HDU多校第三场][HDU 6603][A. Azshara's deep sea]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6603 题目大意:给出一个凸包,凸包内有若干个圆,要求画尽可能多的对角线使得他们两两不在凸包内相交且不与 ...
- 牛客多校第三场F Planting Trees 单调栈
Planting Trees 题意 给出一个矩阵,求最大矩阵面积满足该矩阵中任2元素的绝对值之差小于等于M T<1000) (n<500)但是题目明示单组(n*3)可过 分析 又是矩阵问题 ...
- 2019年牛客多校第三场 F题Planting Trees(单调队列)
题目链接 传送门 题意 给你一个\(n\times n\)的矩形,要你求出一个面积最大的矩形使得这个矩形内的最大值减最小值小于等于\(M\). 思路 单调队列滚动窗口. 比赛的时候我的想法是先枚举长度 ...
- [2019杭电多校第三场][hdu6608]Fansblog
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6608 大致题意是比p小的最大素数q,求q!%p的值. 由威尔逊定理开始推: $(p-1)!\equiv ...
随机推荐
- 封装一个Model或者Vender类
Model <?php /** * User: Eden * Date: 2019/3/21 * 共有内容 */ class WxPayModel extends Model { protect ...
- Mathtype 问题汇总(3)
1. 调整行间距 2. 调整字号 在 MathType 中,选择「大小 > 定义」将对话框中「完整」所对应的值改为和文字大小匹配的pt(磅值),这样便可以解决在文字编写的 Word 文档中某一行 ...
- 堆学习笔记(未完待续)(洛谷p1090合并果子)
上次讲了堆,别人都说极其简单,我却没学过,今天又听dalao们讲图论,最短路又用堆优化,问懂了没,底下全说懂了,我???,感觉全世界都会了堆,就我不会,于是我决定补一补: ——————来自百度百科 所 ...
- WEBservice的浏览器及元素的常用函数及变量整理总结 (selenium )
由于网页自动化要操作浏览器以及浏览器页面元素,这里笔者就将浏览器及页面元素常用的函数及变量整理总结一下,以供读者在编写网页自动化测试时查阅. from selenium import webdrive ...
- python中列表之间求差集、交集、并集
求两个列表的交集.并集.差集 def diff(listA, listB): # 求交集的两种方式 retA = [i for i in listA if i in listB] retB = lis ...
- JPA扩展(自定义sql)
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法
ref : https://dsqiu.iteye.com/blog/1700312 本文内容框架: §1 Boyer-Moore算法 §2 Horspool算法 §3 Sunday算法 §4 KMP ...
- 使用github经验
使用github经验 良好的使用习惯,就像是每天来看朋友圈一样,不一定每天都有东西要提交,但是一定要一直有一个 repository 在维护,持续的提交代码.同时也要注意自己的 repository的 ...
- Java BinarySearch
Java BinarySearch /** * <html> * <body> * <P> Copyright 1994-2018 JasonInternation ...
- Nginx实现同一端口HTTP跳转HTTPS
小目标:在只监听一个端口的情况下,将http访问跳转为https. 一般情况下http协议使用80端口,https协议443端口.要实现http强制转https是非常简单的事,随便都可以找到很多方案. ...