Fansblog

Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 374 Accepted Submission(s): 107

Problem Description

Farmer John keeps a website called ‘FansBlog’ .Everyday , there are many people visited this blog.One day, he find the visits has reached P , which is a prime number.He thinks it is a interesting fact.And he remembers that the visits had reached another prime number.He try to find out the largest prime number Q ( Q < P ) ,and get the answer of Q! Module P.But he is too busy to find out the answer. So he ask you for help. ( Q! is the product of all positive integers less than or equal to n: n! = n * (n-1) * (n-2) * (n-3) *… * 3 * 2 * 1 . For example, 4! = 4 * 3 * 2 * 1 = 24 )

Input

First line contains an number T(1<=T<=10) indicating the number of testcases.

Then T line follows, each contains a positive prime number P (1e9≤p≤1e14)

Output

For each testcase, output an integer representing the factorial of Q modulo P.

Sample Input

  1. 1
  2. 1000000007

Sample Output

  1. 328400734

题意

给出一个质数p,每一次询问\(s!\%p,(s\text{为小于p的最大质数})\)。

题解

定理:\((p-1)!\equiv p-1 \space(\mod p)\),p 为质数。

并且,质数以ln分配。

所以,$ans \sum_{i=s+1}^{p-1}i\equiv p-1(\mod p) $

所以,$ ans\equiv p-1\sum_{i=s+1}{p-1}i{-1}(\mod p) $

代码

  1. #include<bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. int prime[10]={2,3,5,7,11,13,19,61,2333,24251};
  5. long long M;
  6. int Quick_Multiply(int a,int b,int c)
  7. {
  8. long long ans=0,res=a;
  9. while(b)
  10. {
  11. if(b&1)
  12. ans=(ans+res)%c;
  13. res=(res+res)%c;
  14. b>>=1;
  15. }
  16. return (int)ans;
  17. }
  18. int Quick_Power(int a,int b,int c)
  19. {
  20. int ans=1,res=a;
  21. while(b)
  22. {
  23. if(b&1)
  24. ans=Quick_Multiply(ans,res,c);
  25. res=Quick_Multiply(res,res,c);
  26. b>>=1;
  27. }
  28. return ans;
  29. }
  30. bool Miller_Rabin(int x)
  31. {
  32. int i,j,k;
  33. int s=0,t=x-1;
  34. if(x==2) return true;
  35. if(x<2||!(x&1)) return false;
  36. while(!(t&1))
  37. {
  38. s++;
  39. t>>=1;
  40. }
  41. for(i=0;i<10&&prime[i]<x;++i)
  42. {
  43. int a=prime[i];
  44. int b=Quick_Power(a,t,x);
  45. for(j=1;j<=s;++j)
  46. {
  47. k=Quick_Multiply(b,b,x);
  48. if(k==1&&b!=1&&b!=x-1)
  49. return false;
  50. b=k;
  51. }
  52. if(b!=1) return false;
  53. }
  54. return true;
  55. }
  56. signed main()
  57. {
  58. int T;
  59. cin >> T;
  60. while (T--){
  61. int x;
  62. int ans;
  63. scanf("%lld",&x);
  64. ans = x - 1;
  65. int M = x;
  66. while (Miller_Rabin(x-1) == 0) x--, ans = Quick_Multiply(ans, Quick_Power(x,M-2,M),M);
  67. cout << ans << endl;
  68. }
  69. return 0;
  70. }

2019 Multi-University Training Contest 3 T6 - Fansblog的更多相关文章

  1. 2019 Multi-University Training Contest 3 - 1006 - Fansblog - 打表 - 暴力

    http://acm.hdu.edu.cn/showproblem.php?pid=6608 题意:给一个比较大的质数P(1e14以内),求比它小的最大的质数Q(貌似保证存在的样子,反正我没判不存在) ...

  2. 2019 Nowcoder Multi-University Training Contest 4 E Explorer

    线段树分治. 把size看成时间,相当于时间 $l$ 加入这条边,时间 $r+1$ 删除这条边. 注意把左右端点的关系. #include <bits/stdc++.h> ; int X[ ...

  3. 2019 Nowcoder Multi-University Training Contest 1 H-XOR

    由于每个元素贡献是线性的,那么等价于求每个元素出现在多少个异或和为$0$的子集内.因为是任意元素可以去异或,那么自然想到线性基.先对整个集合A求一遍线性基,设为$R$,假设$R$中元素个数为$r$,那 ...

  4. HDU校赛 | 2019 Multi-University Training Contest 3

    2019 Multi-University Training Contest 3 http://acm.hdu.edu.cn/contests/contest_show.php?cid=850 100 ...

  5. 2019 Multi-University Training Contest 8

    2019 Multi-University Training Contest 8 C. Acesrc and Good Numbers 题意 \(f(d,n)\) 表示 1 到 n 中,d 出现的次数 ...

  6. 2019 Multi-University Training Contest 7

    2019 Multi-University Training Contest 7 A. A + B = C 题意 给出 \(a,b,c\) 解方程 \(a10^x+b10^y=c10^z\). tri ...

  7. 2019 Multi-University Training Contest 1

    2019 Multi-University Training Contest 1 A. Blank upsolved by F0_0H 题意 给序列染色,使得 \([l_i,r_i]\) 区间内恰出现 ...

  8. 2019 Multi-University Training Contest 2

    2019 Multi-University Training Contest 2 A. Another Chess Problem B. Beauty Of Unimodal Sequence 题意 ...

  9. 2019 Multi-University Training Contest 5

    2019 Multi-University Training Contest 5 A. fraction upsolved 题意 输入 \(x,p\),输出最小的 \(b\) 使得 \(bx\%p&l ...

随机推荐

  1. Revo Uninstaller Pro - 真正彻底卸载软件不留垃圾的强大神器!(清理安装残留文件/注册表)

    大家都知道 Windows 在卸载软件时总是不够彻底,系统C盘总会留下大量难以辨别和清理的垃圾文件和临时文件,时间长了注册表也会变得非常臃肿,不仅浪费硬盘空间,而且也会明显拖慢系统响应和启动速度. R ...

  2. c++ xml 解析“后直接跟值问题

    c++ xml库相关 要解析内容: <ITEM name="SLSJ"head="SLSJ"/> 代码: GetNodeAttri(subnodes ...

  3. 如何在linux下安装idea

    [通过官方安装包安装] 在 http://www.jetbrains.com/ 官网下载对应版本. ultimate 旗舰版 community 社区版 然后解压到本地对应目录,打开idea目录下的b ...

  4. Hadoop+HBase分布式部署

    test 版本选择

  5. CAS导致的ABA问题及解决:时间戳原子引用AtomicReference、AtomicStampedReference

    1.CAS导致ABA问题: CAS算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并交换,那么在这个时间差中会导致数据的变化. 比如:线程1从内存位置V中取出A,这时线程2也从V中取出A ...

  6. 【优质blog、网址】置顶

    一.大公司等技术blog:   blog1: http://blog.csdn.net/mfcing/article/details/51577173 blog2: http://blog.csdn. ...

  7. django-xadmin使用

    django-xadmin使用基础环境为: PS:如下环境如需升级python则先升级python,然后安装django python3.6.4安装: http://www.cnblogs.com/c ...

  8. Codeforces 1215D. Ticket Game

    传送门 博弈,发现情况有点多,分析一下把有用的状态提取出来 显然各个位置的数字是没用的,我们只要知道两边的数字和分别是多少 并且状态显然和左右两边的 "?" 数量有关 因为最终我们 ...

  9. ubuntu编译安装swoole (存多版本php时)

    一  切换php版本 见 https://www.cnblogs.com/bushuwei/p/11699503.html 二  编译安装swoole 这里对pecl安装不做介绍,以下是编译安装,复制 ...

  10. xml发post请求

    # python3字符串换行,在右边加个反斜杠 body = '<?xml version="1.0" encoding = "UTF-8"?>' ...