BZOJ4891 TJOI2017龙舟(Polllard-Rho)
对给定模数分解质因数后约分即可。依然常数巨大过不了。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 10010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
ll gcd(ll n,ll m){return m==?n:gcd(m,n%m);}
ll read()
{
ll x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,q,cnt,p[],prime[],tot[],t;
ll g[],a[][N],b[N],c[N],d[N];
bool flag[];
ll ksc(ll a,ll b,ll p)
{
ll t=a*b-(ll)((long double)a*b/p+0.5)*p;
return t<?t+p:t;
}
ll ksm(ll a,ll k,ll p)
{
ll s=;
for (;k;k>>=,a=ksc(a,a,p)) if (k&) s=ksc(s,a,p);
return s;
}
void exgcd(ll &x,ll &y,ll a,ll b)
{
if (b==)
{
x=,y=;
return;
}
exgcd(x,y,b,a%b);
ll t=x;x=y;y=t-a/b*x;
}
ll inv(ll a,ll p)
{
ll x,y;exgcd(x,y,a,p);
x=(x%p+p)%p;
return x;
}
bool check(int k,ll n)
{
if (ksm(k,n-,n)!=) return ;
ll p=n-;
while (!(p&))
{
p>>=;ll x=ksm(k,p,n);
if (x==n-) return ;
if (x!=) return ;
}
return ;
}
bool Miller_Rabin(ll n)
{
if (n<=) return !flag[n];
return check(,n)&&check(,n)&&check(,n)&&check(,n)&&check(,n)&&check(,n);
}
ll f(ll x,ll p,int c){return (ksc(x,x,p)+c)%p;}
void getfactor(ll n)
{
if (n<=)
{
while (n>) g[++cnt]=p[n],n/=p[n];
return;
}
if (Miller_Rabin(n)) {g[++cnt]=n;return;}
while ()
{
int c=rand()%(n-)+;
ll x=rand()%n,y=x;
do
{
ll z=gcd(abs(x-y),n);
if (z>&&z<n) {getfactor(z),getfactor(n/z);return;}
x=f(x,n,c),y=f(f(y,n,c),n,c);
}while (x!=y);
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4891.in","r",stdin);
freopen("bzoj4891.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),m=read(),q=read();
flag[]=;
for (int i=;i<=;i++)
{
if (!flag[i]) prime[++t]=i,p[i]=i;
for (int j=;j<=t&&prime[j]*i<=;j++)
{
flag[prime[j]*i]=;
p[prime[j]*i]=prime[j];
if (i%prime[j]==) break;
}
}
for (int i=;i<=m;i++) b[i]=read();
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
a[i][j]=read();
while (q--)
{
int x=read();ll y=read(),ans=;cnt=;getfactor(y);
sort(g+,g+cnt+);cnt=unique(g+,g+cnt+)-g-;memset(tot,,sizeof(tot));
memcpy(c,b,sizeof(c));memcpy(d,a[x],sizeof(d));
for (int i=;i<=m;i++)
{
for (int j=;j<=cnt;j++)
while (c[i]%g[j]==) tot[j]++,c[i]/=g[j];
for (int j=;j<=cnt;j++)
while (d[i]%g[j]==) tot[j]--,d[i]/=g[j];
ans=ksc(ksc(ans,c[i],y),inv(d[i],y),y);
}
for (int i=;i<=cnt;i++)
if (tot[i]<) {ans=-;break;}
else ans=ksc(ans,ksm(g[i],tot[i],y),y);
cout<<ans<<endl;
}
return ;
}
BZOJ4891 TJOI2017龙舟(Polllard-Rho)的更多相关文章
- BZOJ4891:[TJOI2017]龙舟(Pollard-Rho,exgcd)
Description 加里敦大学有一个龙舟队,龙舟队有n支队伍,每只队伍有m个划手,龙舟比赛是一个集体项目,和每个人的能力息息相关,但由于龙舟讲究配合,所以评价队伍的能力的是一个值c = (b1*b ...
- bzoj4891: [Tjoi2017]龙舟
求$\frac{b_1b_2b_3...b_m}{a_1a_2a_3...a_m}\%M$ M<=1e18,m<=100000,数据组数<=50 用pollard-rho分解M的质因 ...
- 【BZOJ4891】[TJOI2017]龙舟(Pollard_rho)
[BZOJ4891][TJOI2017]龙舟(Pollard_rho) 题面 BZOJ 洛谷 题解 看了半天题....就是让你求\(\frac{b}{a}\)在模\(M\)意义下的值... 首先把\( ...
- POJ 1811 Prime Test (Pollard rho 大整数分解)
题意:给出一个N,若N为素数,输出Prime.若为合数,输出最小的素因子.思路:Pollard rho大整数分解,模板题 #include <iostream> #include < ...
- 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 这 ...
- POJ1811- Prime Test(Miller–Rabin+Pollard's rho)
题目大意 给你一个非常大的整数,判断它是不是素数,如果不是则输出它的最小的因子 题解 看了一整天<初等数论及其应用>相关部分,终于把Miller–Rabin和Pollard's rho这两 ...
- poj 1811 Pallor Rho +Miller Rabin
/* 题目:给出一个数 如果是prime 输出prime 否则输出他的最小质因子 Miller Rabin +Poller Rho 大素数判定+大数找质因子 后面这个算法嘛 基于Birthday Pa ...
- 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); ? ...
- 质因数分解的rho以及miller-rabin
一.前言 质因数分解,是一个在算法竞赛里老生常谈的经典问题.我们在解决许多问题的时候需要用到质因数分解来辅助运算,而且质因数分解牵扯到许许多多经典高效的算法,例如miller-rabin判断素数算法, ...
随机推荐
- java 面向对象内部类
1.内部类概念:将一个类定义在另一个类的内部,该类就称为内部类 类中定义的内部类特点1) 内部类作为外部类的成员,可以直接访问外部类的成员(包括 private 成员),反之则不行.2) 内部类做为外 ...
- 数据库sql的in操作,解决in的过多
一个sql的拼写后,服务器会把这个sql传送到数据库服务器执行,一般不在一个物理机上.那么传送需要走网络,包丢失等网络情况就可能出现. 一般情况,一个sql的长度不会很大,但是有种这样的情况.in操作 ...
- Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- 通过C# WinForm控件创建的WPF WIndow窗口控件无法输入的问题
原文:通过WinForm控件创建的WPF 控件无法输入的问题 今天把写的一个WPF程序发布到别的机器上执行,发现一个比较奇怪的问题:在那个机器上用英文输入法无法输入数字,非要切换到中文输入法才行:但在 ...
- phpstorm 2018.1.2的安装和破解
1.什么是phpstorm? PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查.但是phpstorm是商业软件, ...
- Springboot 2.0.4 整合Mybatis出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
在使用Springboot 2.0.4 整合Mybatis的时候出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are require ...
- CF1153F Serval and Bonus Problem FFT
CF1153F Serval and Bonus Problem 官方的解法是\(O(n ^ 2)\)的,这里给出一个\(O(n \log n)\)的做法. 首先对于长度为\(l\)的线段,显然它的答 ...
- sudo 与输出重定向
本文介绍如何使用 sudo 将输出重定向到当前用户没有权限的文件.注意:本文中 demo 的演示环境为 ubuntu 18.04. Permission denied 问题 如果当前用户没有某个文件的 ...
- Python_复习_习题_29
# 之前做得的题 以后再遇到能保证会# 下周二考 :所有的知识# 面试题:认真对待## 三元运算符# 接收结果的变量 = 条件为真的结果 if 条件 else 条件为假的结果# 接收结果的变量 = “ ...
- 网易2018.03.27算法岗,三道编程题100%样例AC题解
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8660814.html特别不喜欢那些随便转载别人的原创文章又不给 ...