传送门

题意:给出一个质数P,找出小于P的最大的质数N,求出N的阶乘模P。(P∈[1e10,1e14])

思路:威尔逊定理:一个数n若是质数, 则有 (n−1) ! ≡ n−1mod n. 于是可以先令ans=p−1, 再对p−1到q的数对p求逆元。p到q之间的距离不会超过300,Miller Robin大素数 判断可以找到最近的素数。

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
using namespace std;
typedef unsigned long long  ll;
const int S = 20;
ll mult_mod(ll a, ll b, ll c)
{a %= c;b %= c;ll ret = 0, tmp = a;while(b){if(b & 1){ret += tmp;if(ret > c)    ret -= c;}tmp <<= 1;if(tmp > c)    tmp -= c;b >>= 1;}return ret;
}ll pow_mod(ll a, ll n, ll mod)
{ll ret = 1, tmp = a % mod;while(n){if(n & 1)    ret = mult_mod(ret, tmp, mod);tmp = mult_mod(tmp, tmp, mod);n >>= 1;}return ret;
}bool check(ll a, ll n, ll x, ll t)
{ll ret = pow_mod(a, x, n);ll last = ret;for(int i = 1; i <= t; i++){ret = mult_mod(ret, ret, n);if(ret == 1 && last != 1 && last != n-1)    return true;last = ret;}if(ret != 1)    return true;else    return false;
}bool Miller_Rabin(ll n)
{if(n < 2)    return false;if(n == 2)    return true;if((n & 1) == 0)    return false;ll x = n-1, t = 0;while((x & 1) == 0){x >>= 1;t++;}srand(time(NULL));for(int i = 0; i < S; i++){ll a = rand()%(n-1) + 1;if(check(a, n, x, t))    return false;}return true;
}
int main()
{int t;cin>>t;while(t--){ll Q;cin >> Q;ll ans;for(ll i=Q-1;;i--){if(Miller_Rabin(i)){ans=i;break;}}ll sum=Q-1;for(ll i=ans+1;i<Q;i++){sum=mult_mod(sum,pow_mod(i,Q-2,Q),Q);}cout<<sum<<endl;}return 0;
}

hdu 6608 Fansblog 威尔逊定理+大数阶乘取模相关推荐

  1. 阶乘取模算法java_np问题(大数阶乘取模)

    np问题 题目描述: LYK 喜欢研究一些比较困难的问题,比如 np 问题. 这次它又遇到一个棘手的 np 问题.问题是这个样子的:有两个数 n 和 p,求 n 的阶乘对 p 取模后的结果. LYK ...

  2. C# 使用同余代换简化多个大数相乘取模运算

    •(A + B) mod M = ( A mod M + B mod M ) mod M •(A * B) mod M = ((A mod M) *( B mod M)) mod M using Sy ...

  3. 梅森素数:nefu 120 梅森素数(卢卡斯—莱默判别法+大数乘积取模)

    梅森素数 description 由于梅森学识渊博,才华横溢,为人热情以及最早系统而深入地研究2p-1 型的数(其中p为素数),为了纪念他,数学界就把这种数称为"梅森数":并以Mp ...

  4. HDU 6608 FansBlog(粉丝博客)(MillerRabin算法+威尔逊算法)

    Farmer John keeps a website called 'FansBlog' .Everyday , there are many people visited this blog.On ...

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

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

  6. 威尔逊定理 ---- [hdu-6608] Fansblog 威尔逊定理 质数的密度分布 快速乘优化快速幂防止中间爆longlong

    题目链接 题目大意:就是给你一个质数P∈[2,1e14]P\in[2,1e14]P∈[2,1e14]求一个质数Q<PQ<PQ<P解出Q!modPQ!modPQ!modP 解题思路: ...

  7. 「hdu6608」Fansblog 威尔逊定理

    「hdu6608」 Fansblog 今天回顾之前多校联赛的题目:Fansblog ,发现一件有趣的事情,快速积的时间复杂度,比普通*快多了,刚才一直Tle 在用了普通*,卧槽这也能T,当然也有乘法爆 ...

  8. HDU 6608 Fansblog——————大素数检测

    Fansblog 点击题目查看题面 点击这里也可以 Source 2019 Multi-University Training Contest 3 给你一个素数PPP 让给你求最接近P的素数QQQ 输 ...

  9. C语言大数阶乘取余,python中math模块常用函数介绍 取模(取余)取绝对值 求阶乘 求最大公约数最小公倍数 取对数 取根号 取幂(取次方) 取整函数 三角函数与反三角函数...

    前提:import math 两个常用常量 e = 2.718281828459045 pi = 3.141592653589793 >>> import math >> ...

最新文章

  1. 一、nginx 安装
  2. [转]CentOS 5.5下FTP安装及配置
  3. How to resolve error message Malformed URI literal syntax
  4. java 反射与泛型_Java基础系列 - 泛型和反射机制
  5. 列运算_DAX表操作基础第二招:增加列
  6. JavaWab项目1 ---- 技术架构
  7. 千方科技的中场战事:选择、进化与野望
  8. 博客系统php源码,tjheer博客系统php版 v1.10
  9. 平台打包整合成exe安装部署(java+mysql+tomcat+war)
  10. 小程序 40163_小程序获取openid 出现null,{errcode:40163,errmsg:code been used, hints: [ req_id: WNUzlA0105t...
  11. python导入文件夹下所有包_python 通过文件夹导入包的操作
  12. Codeforces 1156B
  13. 信息系统项目管理师必背核心考点(六十二)项目组合治理主要过程
  14. Blender2.8入门教程(1): 物体操作、物体编辑、修改器Modifier
  15. Mingle 2.0 发布了
  16. Python坦克大战小游戏(三):背景
  17. 推理机Jess,Racer,Jena
  18. 一枝看上去很美的花——书评《Java与模式》
  19. xStream:Security framework of XStream not initialized, XStream is probably vulnerable
  20. 数据分析有哪些分类?

热门文章

  1. ROS通信机制:话题、服务、参数
  2. 《C语言点滴》一1.2 程序猿和互联网
  3. QT程序退出后托盘图标不消失问题
  4. png转pdf, pdf转png
  5. office:word在编辑内容时反应迟钝的解决办法
  6. #超全#行人重识别数据集整理,附下载链接和介绍
  7. android qq截屏快捷键是什么,手机截屏的快捷键是什么,超过3种截图的快捷键操作方法!...
  8. Flak 解析json数据不完整?
  9. 用c语言将2048的分数存档,利用C语言实现2048小游戏的方法
  10. 拒绝“累丑”,走进RPA的世界