求$\frac{b_1b_2b_3...b_m}{a_1a_2a_3...a_m}\%M$

M<=1e18,m<=100000,数据组数<=50

用pollard-rho分解M的质因数,提取出$b_i,a_i$与M不互质的部分处理一下

#include<cstdio>
#include<algorithm>
typedef long long i64;
typedef long double ld;
char buf[],*ptr=buf+;
int G(){
if(buf+==ptr)fread(ptr=buf,,,stdin);
return *ptr++;
}
i64 _(){
i64 x=;
if(ptr-buf<){
while(*ptr<)++ptr;
while(*ptr>)x=x*+(*ptr++)-;
}else{
int c=G();
while(c<)c=G();
while(c>)x=x*+c-,c=G();
}
return x;
}
int n,m,k;
i64 b[],a[][];
int fp,ts[];
i64 fs[];
i64 mul(i64 a,i64 b,i64 c){
if(c<=2000000000ll)return a*b%c;
i64 r=a*b-i64(ld(a)/c*b)*c;
if(r>=c||r<=-c)r%=c;
return r>=?r:r+c;
}
i64 pw(i64 a,i64 n,i64 P){
i64 v=;
for(;n;n>>=,a=mul(a,a,P))if(n&)v=mul(v,a,P);
return v;
}
i64 gcd(i64 a,i64 b){
if(a<)a=-a;
for(i64 c;b;c=a,a=b,b=c%b);
return a;
}
bool mr(i64 n){
i64 z=n-;
int t=;
while(~z&)z>>=,++t;
for(int i=;i<;++i){
i64 a=rand()%(n-)+;
i64 x=pw(a,z,n);
for(int j=;j<t;++j){
i64 y=mul(x,x,n);
if(y==&&x!=&&x!=n-)return ;
x=y;
}
if(x!=)return ;
}
return ;
}
i64 get(i64 x,int c){
int i=,j=;
i64 a=(rand()^i64(rand())<<)%(x-)+,b=a;
while(){
a=mul(a,a,x);
if((a+=c)>=x)a%=x;
i64 p=gcd(a-b,x);
if(p!=)return p;
if((++i)==j)j<<=,b=a;
}
}
void calc(i64 n){
if(n==)return;
if(mr(n)){
fs[fp++]=n;
return;
}
for(int c=;;++c){
i64 a=get(n,c);
if(a!=n){
i64 b=gcd(a,n/a);
calc(a/b);
calc(n/a/b);
calc(b);
return;
}
}
}
i64 cal(i64*b,i64*a,i64 M){
fp=;
calc(M);
std::sort(fs,fs+fp);
fp=std::unique(fs,fs+fp)-fs;
i64 phi_M=M;
for(int i=;i<fp;++i)ts[i]=,phi_M=phi_M/fs[i]*(fs[i]-);
i64 B=,A=,x;
for(int i=;i<=m;++i){
x=b[i];
if(fs[]==)for(;~x&;x>>=,++ts[]);
for(int j=(fs[]==);j<fp;++j){
for(i64 p=fs[j],y=x/p;y*p==x;x=y,y=y/p,++ts[j]);
}
B=mul(B,x,M);
}
for(int i=;i<=m;++i){
x=a[i];
if(fs[]==)for(;~x&;x>>=,--ts[]);
for(int j=(fs[]==);j<fp;++j){
for(i64 p=fs[j],y=x/p;y*p==x;x=y,y=y/p,--ts[j]);
}
A=mul(A,x,M);
}
B=mul(B,pw(A,phi_M-,M),M);
for(int i=;i<fp;++i){
if(ts[i]<)return -;
B=mul(B,pw(fs[i],ts[i],M),M);
}
return B;
}
int main(){
srand();
n=_();m=_();k=_();
for(int i=;i<=m;++i)b[i]=_();
for(int t=;t<=n;++t)
for(int i=;i<=m;++i)a[t][i]=_();
for(int i=;i<k;++i){
int x=_();
i64 M=_();
printf("%lld\n",cal(b,a[x],M));
}
return ;
}

bzoj4891: [Tjoi2017]龙舟的更多相关文章

  1. BZOJ4891 TJOI2017龙舟(Polllard-Rho)

    对给定模数分解质因数后约分即可.依然常数巨大过不了. #include<iostream> #include<cstdio> #include<cmath> #in ...

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

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

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

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

  4. BZOJ_4892_[Tjoi2017]dna_哈希

    BZOJ_4892_[Tjoi2017]dna_哈希 Description 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的 性状,但是研究人员 ...

  5. bzoj4892 [TJOI2017]DNA

    bzoj4892 [TJOI2017]DNA 给定一个匹配串和一个模式串,求模式串有多少个连续子串能够修改不超过 \(3\) 个字符变成匹配串 \(len\leq10^5\) hash 枚举子串左端点 ...

  6. 【BZOJ4890】[TJOI2017]城市(动态规划)

    [BZOJ4890][TJOI2017]城市(动态规划) 题面 BZOJ 洛谷 题解 数据范围都这样了,显然可以暴力枚举断开哪条边. 然后求出两侧直径,暴力在直径上面找到一个点,使得其距离直径两端点的 ...

  7. 【BZOJ4887】[TJOI2017]可乐(矩阵快速幂)

    [BZOJ4887][TJOI2017]可乐(矩阵快速幂) 题面 BZOJ 洛谷 题解 模板题??? #include<iostream> #include<cstdio> # ...

  8. P1083龙舟比赛

    题目如下: 现在正在举行龙舟比赛,我们现在获得了最后冲刺时的俯视图像,现在你要输出各条龙舟的名次. 这张图像由r行c列的字符组成,每行的最左边的字符表示起点,所以字符为'S',最右边的字符为'F'.并 ...

  9. 【BZOJ4888】[TJOI2017]异或和(树状数组)

    [BZOJ4888][TJOI2017]异或和(树状数组) 题面 BZOJ 洛谷 题解 考虑每个位置上的答案,分类讨论这一位是否存在一,值域树状数组维护即可. #include<iostream ...

随机推荐

  1. uboot能ping通本机无法ping通本机上搭建的虚拟机

    注意 转载请注明出处:https://www.cnblogs.com/dakewei 一.背景 1.1 uboot不能被其它主机ping通,这是由于uboot没有对其它主机发送过来的arp包进行响应, ...

  2. jsoop_封装

    <script> //java.utils.ArrayList() //包(命名空间) /* var java = {}; java.utils = {}; java.utils.Arra ...

  3. JDK 1.8 ConcurrentHashMap 源码剖析

    转载两篇不错的文章: 第一篇: 前言 HashMap是我们平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,进行put操作有可能会引起死循环,导致CPU利用率接近100%. ...

  4. POJ 1386 Play on Words(欧拉路)

    http://poj.org/problem?id=1386 题意: 给出多个单词,只有单词首字母与上一个单子的末尾字母相同时可以连接,判断所有字母是否可以全部连接在一起. 思路: 判断是否存在欧拉道 ...

  5. Thinking in java note1

    Part information collecting from http://blog.csdn.net/leonliu06/article/details/78638841 1. 如果已经定义了一 ...

  6. TCGA系列--TCGA可视化数据库GEPIA

    中国大牛力作  张泽民: http://gepia.cancer-pku.cn/index.html http://cancer-pku.cn/

  7. Looper.loop() android线程中的消息循环

    Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Loope ...

  8. vSphere Client的拷贝 粘帖 功能

    Windows Client OS的情况下, Remote Desktop 自带拷贝/粘帖 功能, 所以一直没在意. 这回用CentOS, 比起vnc viewer , 感觉还是自带的 vSphere ...

  9. Rails 5 Test Prescriptions 第8章 Integration Testing with Capybara and Cucumber

    Capybara:  A complete reference is available atrubydoc.info. 集成测试就是把局部的程序组合起来测试. 端到端测试是一个特殊的集成测试,覆盖了 ...

  10. WEB前端性能优化常见方法

    1.https://segmentfault.com/a/1190000008829958 (WEB前端性能优化常见方法) 2..https://blog.csdn.net/mahoking/arti ...