对给定模数分解质因数后约分即可。依然常数巨大过不了。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. #define N 10010
  10. char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
  11. ll gcd(ll n,ll m){return m==?n:gcd(m,n%m);}
  12. ll read()
  13. {
  14. ll x=,f=;char c=getchar();
  15. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  16. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  17. return x*f;
  18. }
  19. int n,m,q,cnt,p[],prime[],tot[],t;
  20. ll g[],a[][N],b[N],c[N],d[N];
  21. bool flag[];
  22. ll ksc(ll a,ll b,ll p)
  23. {
  24. ll t=a*b-(ll)((long double)a*b/p+0.5)*p;
  25. return t<?t+p:t;
  26. }
  27. ll ksm(ll a,ll k,ll p)
  28. {
  29. ll s=;
  30. for (;k;k>>=,a=ksc(a,a,p)) if (k&) s=ksc(s,a,p);
  31. return s;
  32. }
  33. void exgcd(ll &x,ll &y,ll a,ll b)
  34. {
  35. if (b==)
  36. {
  37. x=,y=;
  38. return;
  39. }
  40. exgcd(x,y,b,a%b);
  41. ll t=x;x=y;y=t-a/b*x;
  42. }
  43. ll inv(ll a,ll p)
  44. {
  45. ll x,y;exgcd(x,y,a,p);
  46. x=(x%p+p)%p;
  47. return x;
  48. }
  49. bool check(int k,ll n)
  50. {
  51. if (ksm(k,n-,n)!=) return ;
  52. ll p=n-;
  53. while (!(p&))
  54. {
  55. p>>=;ll x=ksm(k,p,n);
  56. if (x==n-) return ;
  57. if (x!=) return ;
  58. }
  59. return ;
  60. }
  61. bool Miller_Rabin(ll n)
  62. {
  63. if (n<=) return !flag[n];
  64. return check(,n)&&check(,n)&&check(,n)&&check(,n)&&check(,n)&&check(,n);
  65. }
  66. ll f(ll x,ll p,int c){return (ksc(x,x,p)+c)%p;}
  67. void getfactor(ll n)
  68. {
  69. if (n<=)
  70. {
  71. while (n>) g[++cnt]=p[n],n/=p[n];
  72. return;
  73. }
  74. if (Miller_Rabin(n)) {g[++cnt]=n;return;}
  75. while ()
  76. {
  77. int c=rand()%(n-)+;
  78. ll x=rand()%n,y=x;
  79. do
  80. {
  81. ll z=gcd(abs(x-y),n);
  82. if (z>&&z<n) {getfactor(z),getfactor(n/z);return;}
  83. x=f(x,n,c),y=f(f(y,n,c),n,c);
  84. }while (x!=y);
  85. }
  86. }
  87. int main()
  88. {
  89. #ifndef ONLINE_JUDGE
  90. freopen("bzoj4891.in","r",stdin);
  91. freopen("bzoj4891.out","w",stdout);
  92. const char LL[]="%I64d\n";
  93. #else
  94. const char LL[]="%lld\n";
  95. #endif
  96. n=read(),m=read(),q=read();
  97. flag[]=;
  98. for (int i=;i<=;i++)
  99. {
  100. if (!flag[i]) prime[++t]=i,p[i]=i;
  101. for (int j=;j<=t&&prime[j]*i<=;j++)
  102. {
  103. flag[prime[j]*i]=;
  104. p[prime[j]*i]=prime[j];
  105. if (i%prime[j]==) break;
  106. }
  107. }
  108. for (int i=;i<=m;i++) b[i]=read();
  109. for (int i=;i<=n;i++)
  110. for (int j=;j<=m;j++)
  111. a[i][j]=read();
  112. while (q--)
  113. {
  114. int x=read();ll y=read(),ans=;cnt=;getfactor(y);
  115. sort(g+,g+cnt+);cnt=unique(g+,g+cnt+)-g-;memset(tot,,sizeof(tot));
  116. memcpy(c,b,sizeof(c));memcpy(d,a[x],sizeof(d));
  117. for (int i=;i<=m;i++)
  118. {
  119. for (int j=;j<=cnt;j++)
  120. while (c[i]%g[j]==) tot[j]++,c[i]/=g[j];
  121. for (int j=;j<=cnt;j++)
  122. while (d[i]%g[j]==) tot[j]--,d[i]/=g[j];
  123. ans=ksc(ksc(ans,c[i],y),inv(d[i],y),y);
  124. }
  125. for (int i=;i<=cnt;i++)
  126. if (tot[i]<) {ans=-;break;}
  127. else ans=ksc(ans,ksm(g[i],tot[i],y),y);
  128. cout<<ans<<endl;
  129. }
  130. return ;
  131. }

BZOJ4891 TJOI2017龙舟(Polllard-Rho)的更多相关文章

  1. BZOJ4891:[TJOI2017]龙舟(Pollard-Rho,exgcd)

    Description 加里敦大学有一个龙舟队,龙舟队有n支队伍,每只队伍有m个划手,龙舟比赛是一个集体项目,和每个人的能力息息相关,但由于龙舟讲究配合,所以评价队伍的能力的是一个值c = (b1*b ...

  2. bzoj4891: [Tjoi2017]龙舟

    求$\frac{b_1b_2b_3...b_m}{a_1a_2a_3...a_m}\%M$ M<=1e18,m<=100000,数据组数<=50 用pollard-rho分解M的质因 ...

  3. 【BZOJ4891】[TJOI2017]龙舟(Pollard_rho)

    [BZOJ4891][TJOI2017]龙舟(Pollard_rho) 题面 BZOJ 洛谷 题解 看了半天题....就是让你求\(\frac{b}{a}\)在模\(M\)意义下的值... 首先把\( ...

  4. POJ 1811 Prime Test (Pollard rho 大整数分解)

    题意:给出一个N,若N为素数,输出Prime.若为合数,输出最小的素因子.思路:Pollard rho大整数分解,模板题 #include <iostream> #include < ...

  5. POJ2429 - GCD & LCM Inverse(Miller–Rabin+Pollard's rho)

    题目大意 给定两个数a,b的GCD和LCM,要求你求出a+b最小的a,b 题解 GCD(a,b)=G GCD(a/G,b/G)=1 LCM(a/G,b/G)=a/G*b/G=a*b/G^2=L/G 这 ...

  6. POJ1811- Prime Test(Miller–Rabin+Pollard's rho)

    题目大意 给你一个非常大的整数,判断它是不是素数,如果不是则输出它的最小的因子 题解 看了一整天<初等数论及其应用>相关部分,终于把Miller–Rabin和Pollard's rho这两 ...

  7. poj 1811 Pallor Rho +Miller Rabin

    /* 题目:给出一个数 如果是prime 输出prime 否则输出他的最小质因子 Miller Rabin +Poller Rho 大素数判定+大数找质因子 后面这个算法嘛 基于Birthday Pa ...

  8. Miller_Rabin素数判断,rho

    safe保险一点5吧.我是MR: ; int gcd(int a,int b){return !b?a:gcd(b,a%b);} int mul(int a,int b,int p){ )*p); ? ...

  9. 质因数分解的rho以及miller-rabin

    一.前言 质因数分解,是一个在算法竞赛里老生常谈的经典问题.我们在解决许多问题的时候需要用到质因数分解来辅助运算,而且质因数分解牵扯到许许多多经典高效的算法,例如miller-rabin判断素数算法, ...

随机推荐

  1. nginx安装升级及配置详解

    1.简介 2.安装配置 3.配置文件介绍 4.启动.停止.平滑重启.升级 一.Nginx简介 Nginx(engine x)是俄罗斯人Igor Sysoev编写的一款高性能的http和反向代理服务器. ...

  2. OpenStack报错:MessagingTimeout: Timed out waiting for a reply to message ID

    L3.agent中出现大量消息超时错误,对网络的操作各种异常. 报错如下: -- :: ERROR neutron.agent.l3.agent [req-db9207e6--4f23-8c19-0d ...

  3. Adobe PhotoshopCC2017 安装与破解(Mac)

    简单说明下Adobe Photoshop CC 2017的破解方法: 1.打开dmg镜像,双击“Install”进行安装,登陆Adobe ID(没有注册一个)完成安装: 2.解压缩“Adobe Zii ...

  4. 判断response.data是否为空

    需要对response.data进行判断,是否有数据返回.如果是空的,将要处理一些事情,反之,又要处理另外一些事情. 在jQuery程序中,有一个方法:$.isEmptyObject().此方法在an ...

  5. pycharm shortcut

    Alt+F12 is a shortcut to open/hide Terminal panel

  6. FlashWindowEx实现窗口在任务栏闪烁/变化颜色

    原文:FlashWindowEx实现窗口在任务栏闪烁/变化颜色 效果类似QQ收到新的会话消息任务栏颜色变化 附2小段代码: [System.Runtime.InteropServices.DllImp ...

  7. 查看CentOS/Linux的版本信息

    今天在安装MySql的时候,想选择linux的版本对应的MySql. 1.查看内核版本和x86/x64版本 方法一.cat /proc/version [root@sxl129 Desktop]# c ...

  8. VS2013安装和单元测试

    1. VC2013安装过程及使用感受 刚上大一的时候老师推荐我们用VC++6.0.当时也就听了老师的话用VC++6.0编程了一段时间.后来上了大二买了电脑VC++6.0支持不了WIN8.1所以我就开始 ...

  9. LINUX内核分析第七周学习总结

    LINUX内核分析第七周学习总结 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.c ...

  10. Linux内核总结博客 20135332武西垚

    http://www.cnblogs.com/wuxiyao/p/5220677.htmlhttp://www.cnblogs.com/wuxiyao/p/5247571.htmlhttp://www ...