[2019杭电多校第三场][hdu6608]Fansblog
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6608
大致题意是比p小的最大素数q,求q!%p的值。
由威尔逊定理开始推:
$(p-1)!\equiv-1(mod p)$
$(p-1)!modp\equiv p-1$
$q!*(q+1)*(q+2)*...*(p-1)modp\equiv p-1$
$q!modp=\tfrac{p-1}{(q+1)*(q+2)*...*(p-1)}modp$
然后只需要求出q就可以了,数量级1e9的判断素数可以用Miller_Rabin判断素数。
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<string> 5 #include<cmath> 6 #include<vector> 7 #include<ctime> 8 using namespace std; 9 typedef long long ll; 10 ll qmul(ll a, ll b, ll mod) { 11 ll ans = 0; 12 while (b) { 13 if (b & 1) 14 ans = (ans + a) % mod; 15 a = (a << 1) % mod; 16 b >>= 1; 17 } 18 return ans; 19 } 20 ll qpow(ll x, ll n, ll mod) { 21 ll ans = 1; 22 while (n) { 23 if (n & 1) 24 ans = qmul(ans, x, mod); 25 x = qmul(x, x, mod); 26 n >>= 1; 27 } 28 return ans; 29 } 30 bool Miller_Rabin(ll x) { //判断素数 31 srand(unsigned(time(NULL))); 32 ll s = 0, t = x - 1; 33 if (x == 2) return true; //2是素数 34 if (x < 2 || !(x & 1)) return false; //如果x是偶数或者是0,1,那它不是素数 35 while (!(t & 1)) { //将x分解成(2^s)*t的样子 36 s++; 37 t >>= 1; 38 } 39 for (int i = 0; i < 10; ++i) { //随便选10个数进行测试 40 ll a = rand() % (x - 1) + 1; 41 ll b = qpow(a, t, x), k; //先算出a^t 42 for (int j = 1; j <= s; ++j) { //然后进行s次平方 43 k = qmul(b, b, x); //求b的平方 44 if (k == 1 && b != 1 && b != x - 1) //用二次探测判断 45 return false; 46 b = k; 47 } 48 if (b != 1) return false; //用费马小定律判断 49 } 50 return true; //如果进行多次测试都是对的,那么x就很有可能是素数 51 } 52 int main() { 53 int t; 54 scanf("%d", &t); 55 while (t--) { 56 ll p, q; 57 scanf("%lld", &p); 58 q = p - 1; 59 while (!Miller_Rabin(q)) 60 --q; 61 ll ans = p - 1; 62 for (ll i = p - 1; i > q; --i) 63 ans = qmul(ans, qpow(i, p - 2, p), p); 64 printf("%lld\n", ans); 65 } 66 return 0; 67 }
转载于:https://www.cnblogs.com/sainsist/p/11342133.html
[2019杭电多校第三场][hdu6608]Fansblog相关推荐
- 2019杭电多校第三场 6608 Fansblog(威尔逊定理+miller_rabin素性测试)
Problem Description 传送门 Farmer John keeps a website called 'FansBlog' .Everyday , there are many peo ...
- 2019 杭电 多校第3场 1006 Fansblog (HDU 6608)
题目链接 题解: 用威尔逊定理变换,然后求逆元. 代码: #include <bits/stdc++.h> using namespace std; typedef long long l ...
- 2019.7.29 杭电多校第三场小结
index > 杭电多校第三场 题号 标题 AC 做法 状态 6603 Azshara's deep sea (51/150)34.00% 6604 Blow up the city (213/ ...
- 2019杭电多校第9场1002 Rikka with Cake HDU6681
2019杭电多校第9场1002 Rikka with Cake HDU6681 题意:给你若干个点按上下左右切割平面,最后问平面内有几块被切割开来. 解法1:红黑树+思维+贪心 A:根据欧拉定理可以得 ...
- 2019杭电多校 第七场 Kejin Player 6656(求期望值)
2019杭电多校 第七场 Kejin Player 6656(求期望值) 题目 http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意 给你n,q.表示有n ...
- 杭电2019多校第三场 HDU-6608 Fansblog
题目:Fansblog 题意大致描述:给定一个质数P(1e9≤P≤1e14),找到比P小的最大的质数Q,并求出Q!%P 需要了解的知识 威尔逊定理 在初等数论中,威尔逊定理给出了判定一个自然数是否为素 ...
- 杭电2019多校第三场 HDU-6608 Fansblog(威尔逊定理+素数间隔+逆元)
威尔逊定理:在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件.即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p ),但是由于阶乘是呈爆炸增长的,其结论对于实际操 ...
- 杭电2019多校第三场 HDU-6608 Fansblog(威尔逊定理+大数判素数+逆元)
威尔逊定理:在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件.即:当且仅当p为素数时:(p−1)!≡−1(modp)( p -1 )! ≡ -1 ( mod p )(p−1)!≡− ...
- 杭电多校第三场-H-Game
题目描述 Again Alice and Bob is playing a game with stones. There are N piles of stones labelled from 1 ...
- 【2019.08.21】2019杭电多校第十场
补题地址:http://acm.hdu.edu.cn/listproblem.php?vol=58 题号:6691-6701 1001: 1002: 1003:✅ 1004: 1005:✅ 1006: ...
最新文章
- Bootstrap select 多选并获取选中的值
- css如何设置dialog,css-dialog提示
- 011_Spring Data JPA多对多关系
- Python_sqlalchemy——创建、查询、删除、更新一对多的表
- java log4j 多个文件_为什么log4j会记录到两个单独的文件? [重复]
- Price determination entry point - how is 4.85 calculated
- 矩阵的对数运算公式_必修一——对数与对数运算
- 噪声的频谱分析的重要意义_噪声测量:噪声源识别与定位的方法简析
- Centos中iptables和firewall防火墙
- 内容页超连接关键词的完美实现
- 选项菜单-上下文菜单
- 渗透测试工具有哪些?
- Android手机健康类APP市场分析
- 六级听力技巧与备考策略
- 校园车辆管理系统的设计与实现(论文+源码)_kaic
- mysql mtq_mysql高级复习 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区
- python数字求和菜鸟教程_Python Number(数字) | 菜鸟教程
- python单曲循环播放MP3
- 服务器系统迁移工具,Win2008 R2迁移实战之迁移工具使用
- php仿u8系统模板_中文分词源码_7urpu8 采用php的源码实现 - 下载 - 搜珍网
热门文章
- video上传架构设计与实现
- 收集一些非常好用常用的用户函数。分享给大家参考。
- 使用Ant发布web应用到tomcat
- 王建林的一个亿,靠打工能实现么?
- 左手用R右手Python系列之——表格数据抓取之道
- 《机器学习实战》代码实现学习一 使用K-近邻算法改进约会网站的配对效果(数据准备)...
- Mathematics Base - 期望、方差、协方差、相关系数总结
- 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home...
- unix解释器文件详解
- [原创]Datagrid和Button控件