HDU 6608 Fansblog——————大素数检测
Fansblog
Source
2019 Multi-University Training Contest 3
给你一个素数PPP
让给你求最接近P的素数QQQ
输出 Q!%PQ!\%PQ!%P
根据威尔逊定理我们可以知道
当且仅当PPP是素数时
(P−1)!%P=−1(P-1)!\%P=-1(P−1)!%P=−1
即
(P−1)!%P=P−1(P-1)!\%P=P-1(P−1)!%P=P−1
/*--------- Hongjie ----------*/
// #include<bits/stdc++.h>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
#include<bitset>
#include<set>
#include<vector>
#include<bits/stdc++.h>
#define il inline
#define ll long long
#define RE register
#define For(i,a,b) for(RE int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(RE int (i)=(b);(i)>=(a);(i)--)
using namespace std;
const int cnt=3,tab[5]={2,3,7,61};
ll T,Q,P;
ll n,m;
ll Mul(ll x,ll y,ll mod){ll ans=(x*y-(ll)((long double)x/mod*y+0.5)*mod);return ans<0?ans+mod:ans;
}
ll Exp(ll x,ll y,ll mod){ll ans=1;while(y){if(y&1) ans=Mul(ans,x,mod);y>>=1;x=Mul(x,x,mod);}return ans;
}
bool Miller_Rabin(ll n){if(n==2||n==3||n==5||n==7||n==11||n==61) return 1;if(n==1||n%2==0||n%3==0||n%5==0||n%7==0||n%11==0||n%61==0) return 0;For(i,0,cnt) {RE ll d=n-1;while(!(d&1)) d>>=1;RE ll s=Exp(tab[i],d,n);while(s!=1&&s!=n-1&&d!=n-1) d<<=1,s=Mul(s,s,n);if(s!=n-1&&!(d&1)) return 0;}return 1;
}ll inv(ll a,ll p) {return Exp(a,p-2,p);
}int main(){// freopen("../in.txt","r",stdin);// freopen("../out.txt","w",stdout);scanf("%I64d",&T);while(T--) {scanf("%I64d",&P);for(ll q=P-1;;q--)if(Miller_Rabin(q)) {Q = q;break;}ll ans = P-1;for(ll i = Q+1;i<P;++i)ans = Mul(ans, inv(i,P), P);// ans = ans*inv(i,P)%P;// cout<<ans<<endl;printf("%I64d\n",ans%P);}return 0;
}
HDU 6608 Fansblog——————大素数检测相关推荐
- hdu 6608 Fansblog 威尔逊定理+大数阶乘取模
传送门 题意:给出一个质数P,找出小于P的最大的质数N,求出N的阶乘模P.(P∈[1e10,1e14]) 思路:威尔逊定理:一个数n若是质数, 则有 (n−1) ! ≡ n−1mod n. 于是可以先 ...
- HDU 6608 Fansblog(随机素数测试+思维)
传送门 不得不说这种倒着除回去的想法真的是太绝了. 至于大数的素性测试,也是板子,没什么好说的. #include<bits/stdc++.h> #define int long long ...
- HDU 6608 FansBlog(粉丝博客)(MillerRabin算法+威尔逊算法)
Farmer John keeps a website called 'FansBlog' .Everyday , there are many people visited this blog.On ...
- HDU 6608 [2019 Multi-University Training Contest 3]
Fansblog Problem Description Farmer John keeps a website called 'FansBlog' .Everyday , there are man ...
- HDU 6608:Fansblog(威尔逊定理)
Fansblog Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Subm ...
- 实验三:实现一个大素数生成算法
一.实验内容 掌进一步掌握大素数分解的一般原理和实现方法.能用间接方法实现大素数分解.用代码实现Solovay-Strassen素性测试法或Miller-Rabin素性测试法. 二.分实现一个大素数生 ...
- C++实现伪大素数生成算法(费马小定理判别法、米勒拉宾素数判定法)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.伪大素数生成原理 方法一 方法二 数学基础 二.费马小定理判别法 1.算法 2.代码实现 3.运行结果 二.米勒拉宾素数 ...
- HDUOJ 6608 Fansblog
HDUOJ 6608 Fansblog 题目链接 Problem Description Farmer John keeps a website called 'FansBlog' .Everyday ...
- 经典加密算法的实现与破解大素数生成算法
0x00 信息系统安全实验报告 实验(一):经典加密算法的实现与破解 1. 实现凯撒加密.暴力破解凯撒加密 2. 选取k值,编译凯撒加密算法 3. 编写算法尝试暴力破解凯撒加密 实验(二):大素数生成 ...
最新文章
- Python Cookie HTTP获取cookie并处理
- linux uvc 支持的设备,摄像头是否支持uvc
- C# 加载 SQLite DLL问题
- php抓取运动步数,使用PHP抓取微博数据
- Win谷歌插件加载失效
- 在word中使用notepad++实现代码的语法高亮
- clob字段怎么导出_Oracle 11g及12c+版本下为啥有些表不能exp导出?
- 谷粒商城基础篇爬坑笔记--项目导入intellij IDEA后pom.xml无法识别为maven文件和程序包import com.atguigu.common.XXX不存在两个问题解决方法
- 递归查找所有子代id php,PHP递归函数:从父ID获取子ID
- oracle的成本核算,Oracle11gR2全表扫描成本计算(工作量模式-workload)
- kotlin中List,Map,数组的使用
- Java 求100以内的质数(素数)
- 线与逻辑与OC门、OD门关系
- cad文件如何转pdf图纸进行标准的打印
- 扫地机器人朋友圈文案_扫地机器人的简单文案
- 我在哪?要到哪里去?怎么去?
- 无线路由的四种加密方式
- Android开发指南中文版
- jupyter notebook 的 hinterland 插件 设置 代码提示但是默认不选中
- [Practical.Vim(2012.9)].Drew.Neil.Tip02 学习摘要