威尔逊定理:在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件。即:当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p ),但是由于阶乘是呈爆炸增长的,其结论对于实际操作意义不大。

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6608

题意:T组样例。每组样例,给出一个素数P(1e9≤P≤1e14),Q是P的前一个素数求Q!%P。

思路:由威尔逊定理得:,即。又因为,得到

因为两个素数之间的间隔不会超过300,我们从P-1开始一个个查验找Q。再把(P-1)乘上[Q,P-1]的逆元即可。注意因为数很大,所有涉及乘的地方都要用快速乘。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e7+10;
ll mod;
int prime[N+10],cnt;
bool vis[N+10];
bool is_prime(ll x)
{for(int i=0;i<cnt&&(ll)prime[i]*prime[i]<=x;i++){if(x%prime[i]==0)return 0;}return 1;
}
void get_prime()
{for(int i=2;i<=N;i++){if(!vis[i])prime[cnt++]=i;for(int j=0;j<cnt&&(ll)i*prime[j]<=N;j++){vis[i*prime[j]]=1;if(i%prime[j]==0) break;    }    }
}
ll mul(ll a,ll b)
{ll res=0;while(b){if(b&1) res=(res+a)%mod;a=(a+a)%mod;b>>=1;}return res%mod;
}
ll poww(ll a,ll b)
{ll res=1;while(b){if(b&1) res=mul(res,a);a=mul(a,a);b>>=1;}return res;
}
int main(void)
{int t;get_prime(); ll p,q;scanf("%d",&t);while(t--){scanf("%lld",&p);mod=p;q=p-1;while(!is_prime(q)) q--;//cout<<pp<<endl;ll ans=p-1;for(ll i=q+1;i<=p-1;i++)ans=mul(ans,poww(i,mod-2));printf("%lld\n",ans);}return 0;
}

杭电2019多校第三场 HDU-6608 Fansblog(威尔逊定理+素数间隔+逆元)相关推荐

  1. 杭电2019多校第三场 HDU-6608 Fansblog

    题目:Fansblog 题意大致描述:给定一个质数P(1e9≤P≤1e14),找到比P小的最大的质数Q,并求出Q!%P 需要了解的知识 威尔逊定理 在初等数论中,威尔逊定理给出了判定一个自然数是否为素 ...

  2. 杭电2019多校第三场 HDU-6608 Fansblog(威尔逊定理+大数判素数+逆元)

    威尔逊定理:在初等数论中,威尔逊定理给出了判定一个自然数是否为素数的充分必要条件.即:当且仅当p为素数时:(p−1)!≡−1(modp)( p -1 )! ≡ -1 ( mod p )(p−1)!≡− ...

  3. HDU 2019 Multi-University Training Contest 1 杭电2019多校联合训练赛 第一场 1001 Blank (6578)

    HDU 2019 Multi-University Training Contest 1 杭电2019暑期多校集训第一场 1001 Blank (6578) Problem Description T ...

  4. 2019多校第三场 HDU6608 Fansblog(威尔逊定理,逆元,质数间隔)

    链接:HDU6608 Fansblog 题意: 给出一个质数PPP(109≤P≤101410^9\le P\le 10^{14}109≤P≤1014),找出最大的质数QQQ(Q<PQ \lt P ...

  5. 2019.7.29 杭电多校第三场小结

    index > 杭电多校第三场 题号 标题 AC 做法 状态 6603 Azshara's deep sea (51/150)34.00% 6604 Blow up the city (213/ ...

  6. 2020杭电暑期多校02 10 - Lead of Wisdom (HDU6772) 常数坑

    20200725005909 2020杭电暑期多校02 10 - Lead of Wisdom (HDU6772) 常数坑 如果一直 TLE,就看第三章. 一.题意 物品可能的种类有 kkk 种,编号 ...

  7. 24dian(牛客多校第三场)

    24dian(牛客多校第三场) 题意: 给你n张牌,每张牌的大小为1 ~ 13,问这些牌与加减乘除任意组合(可以使用括号),且但所有的有效解在计算过程中都涉及到分数,即非整数,能否组成答案m,如果可以 ...

  8. 牛客多校第三场 B【Classical String Problem】

    牛客多校第三场 B[Classical String Problem] 链接:https://ac.nowcoder.com/acm/contest/5668/B 来源:牛客网 题目描述 Given ...

  9. 三个重要的同余式——威尔逊定理、费马小定理、欧拉定理 + 求幂大法的证明

    一.威尔逊定理 若p为质数,则 p|(p-1)!+1 亦:(p-1)! ≡ p-1 ≡ -1(mod p) 例题: HDU 2973 YAPTCHA (威尔逊定理及其逆定理) 解题报告见http:// ...

最新文章

  1. JVM自动内存管理:对象判定和回收算法
  2. 混合mixin函数_Less 混合
  3. 微博平台StatusNet研究(3):友好URL与OpenID支持
  4. 网络推广——网络推广专员面对网站收录异常要学会多角度分析
  5. java idea 模块_使用IntelliJ IDEA搭建多maven模块JAVA项目
  6. C/C++数组与指针
  7. html后台数据分类管理,细分数据.html
  8. FPGA硬件学习基础知识点总结(1)
  9. spring学习(33):id和name
  10. 三星Galaxy S11+电池谍照曝光:5000mAh超大容量 5G 不虚
  11. html页面改成thymeleaf,【Thymeleaf】Thymeleaf模板对html实时刷新
  12. python入门经典 财务-财务方面的学生如何学习python?
  13. FormBorderStyle 枚举
  14. Pycharm中更改镜像源
  15. 使用VC2005编译静态应用程序的方法
  16. python语言def_python中def的含义
  17. 仙童的ua741运算放大器内部电路
  18. Captcha Cracker (java)附带replace用法
  19. 「NFT 之王」无聊猿与品牌的跨界营销!
  20. 数字IC(SoC)低功耗设计方法总结

热门文章

  1. Unity游戏动画 从入门到住院 1
  2. 英语46级报名考试系统
  3. 手机做显示器服务器,华为MateView体验:手机做主机,显示器也能当电脑用
  4. 斜线表头html怎么做,Excel三栏斜线表头的完美制作方法
  5. 打造在线简历生成器,让面试官眼前一亮……
  6. Excel,world ,ppt文件图标显示异常解决办法 (2022最新)
  7. word中运行Mathtype报错问题解决方案(The MathType DLL cannot be found)
  8. 华为云迁移工具推荐最佳实践:Xen虚拟化迁移到华为云
  9. php开发俄罗斯方块,HTML5+JS实现俄罗斯方块原理及具体步骤_html5教程技巧
  10. 基于python的opencv相机标定(采用黑白棋盘格标定板)