BZOJ3481 DZY Loves Math III(数论+Pollard_Rho)
考虑对于每一个x有多少个合法解。得到ax+by=c形式的方程。如果gcd(x,y)|c,则a在0~y-1范围内的解的个数为gcd(x,y)。也就是说现在所要求的是Σ[gcd(x,P)|Q]*gcd(x,P)。
对这个式子套路地枚举gcd,可以得到Σdφ(P/d) (d|gcd(P,Q))。质因子间相互独立,考虑每个质因子的贡献再累乘。如果d取完了P的某项质因子,那么该质因子的贡献为piqi,否则为(pi-1)piqi-1。于是rho分解完质因数就可以算了。
注意特判Q=0。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define P 1000000007
#define ll long long
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,cntp=,cntq=,ans=;
ll p[],q[],a[],b[],c[],d[];
ll gcd(ll n,ll m){return m==?n:gcd(m,n%m);}
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(int a,ll k,ll p)
{
if (k==) return ;
ll tmp=ksm(a,k>>,p);tmp=ksc(tmp,tmp,p);
if (k&) return ksc(tmp,a,p);else return tmp;
}
bool check(int k,ll n)
{
if (k>=n) return ;
ll p=n-;
ll t=ksm(k,p,n);
if (t==n-) return ;
if (t!=) return ;
while (!(p&))
{
p>>=;
ll t=ksm(k,p,n);
if (t==n-) return ;
if (t!=) return ;
}
return ;
}
bool Miller_Rabin(ll n)
{
if (n==) return ;
for (int i=;i*i<=min(n,100ll);i++)
if (n%i==) return n==i;
if (n<=) return ;
else return check(,n)&&check(,n)&&check(,n)&&check(,n)&&check(,n)&&n!=;
}
ll f(ll x,ll n,int c){return (ksc(x,x,n)+c)%n;}
void Pollard_Rho(ll n,ll *a,int &cnt)
{
if (n==) return;
if (Miller_Rabin(n)) {a[++cnt]=n;return;}
if (n<=) for (int i=;i<=n;i++) if (n%i==&&Miller_Rabin(n/i)) {a[++cnt]=n/i;Pollard_Rho(i,a,cnt);return;}
while ()
{
int c=rand()%(n-)+;
ll x=(rand()%n+c)%n,y=x;
do
{
ll z=gcd(abs(x-y),n);
if (z>&&z<n) {Pollard_Rho(n/z,a,cnt),Pollard_Rho(z,a,cnt);return;}
}while ((x=f(x,n,c))!=(y=f(f(y,n,c),n,c)));
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj3481.in","r",stdin);
freopen("bzoj3481.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read();srand();
cntp=;for (int i=;i<=n;i++) p[i]=read(),Pollard_Rho(p[i],a,cntp);
cntq=;for (int i=;i<=n;i++) q[i]=read(),Pollard_Rho(q[i],b,cntq);
sort(a+,a+cntp+);sort(b+,b+cntq+);
for (int i=;i<=cntp;i++)
{
int t=i;
while (a[t+]==a[i]) t++;
c[i]=t-i+;i=t;
}
for (int i=;i<=cntq;i++)
{
int t=i;
while (b[t+]==b[i]) t++;
d[i]=t-i+;i=t;
}
for (int i=;i<=cntp;i++)
if (c[i]&&!c[i-])
for (int j=i-;j&&!c[j];j--) c[j]=c[j+],c[j+]=;
cntp=unique(a+,a+cntp+)-a-;
for (int i=;i<=cntq;i++)
if (d[i]&&!d[i-])
for (int j=i-;j&&!d[j];j--) d[j]=d[j+],d[j+]=;
cntq=unique(b+,b+cntq+)-b-;
for (int i=;i<=cntp;i++) a[i]%=P;
for (int i=;i<=cntq;i++) b[i]%=P;
if (b[]==)
{
cntq=cntp;
for (int i=;i<=cntp;i++) b[i]=a[i],d[i]=c[i];
}
for (int j=;j<=cntp;j++)
{
int x=;
for (int i=;i<=cntq;i++)
if (b[i]==a[j]) {x=d[i];break;}
if (x<c[j]) ans=1ll*ans*ksm(a[j],c[j]-,P)%P*(x+)%P*(a[j]-)%P;
else ans=1ll*ans*ksm(a[j],c[j]-,P)%P*(1ll*c[j]*(a[j]-)%P+a[j])%P;
}
cout<<ans<<endl;
return ;
}
BZOJ3481 DZY Loves Math III(数论+Pollard_Rho)的更多相关文章
- Bzoj3481 DZY Loves Math III
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 310 Solved: 65 Description Input Output Sample Input ...
- BZOJ3560 DZY Loves Math V 数论 快速幂
原文链接http://www.cnblogs.com/zhouzhendong/p/8111725.html UPD(2018-03-26):蒟蒻回来重新学数论了.更新了题解和代码.之前的怼到后面去了 ...
- BZOJ3561 DZY Loves Math VI 数论 快速幂 莫比乌斯反演
原文链接http://www.cnblogs.com/zhouzhendong/p/8116330.html UPD(2018-03-26):回来重新学数论啦.之前的博客版面放在更新之后的后面. 题目 ...
- bzoj 3481 DZY Loves Math III——反演+rho分解质因数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3481 推推式子发现:令Q=gcd(P,Q),ans=Σ(d|Q) d*phi(P/d).把 ...
- DZY Loves Math系列
link 好久没写数学题了,再这样下去吃枣药丸啊. 找一套应该还比较有意思的数学题来做. [bzoj3309]DZY Loves Math 简单推一下. \[\sum_{i=1}^n\sum_{j=1 ...
- DZY Loves Math 系列详细题解
BZOJ 3309: DZY Loves Math I 题意 \(f(n)\) 为 \(n\) 幂指数的最大值. \[ \sum_{i = 1}^{a} \sum_{j = 1}^{b} f(\gcd ...
- 【BZOJ3561】DZY Loves Math VI (数论)
[BZOJ3561]DZY Loves Math VI (数论) 题面 BZOJ 题解 \[\begin{aligned} ans&=\sum_{i=1}^n\sum_{j=1}^m\sum_ ...
- 【BZOJ 3561】 3561: DZY Loves Math VI (莫比乌斯,均摊log)
3561: DZY Loves Math VI Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 205 Solved: 141 Description ...
- BZOJ 3309: DZY Loves Math
3309: DZY Loves Math Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 761 Solved: 401[Submit][Status ...
随机推荐
- X5webview去掉分享功能和缓存功能
x5webview比原生的webview适配更好,加载更快,对音视频的兼容性更好,具备独特的优势 1) 速度快:相比系统webview的网页打开速度有30+%的提升: 2) 省流量:使用云端优化技术使 ...
- java随记
jdk1.8中新增了 LocalDate 与 LocalDateTime等类来解决日期处理方法,同时引入了一个新的类DateTimeFormatter来解决日期格式化问题. LocalDateTime ...
- STM平台增加性能测试/稳定性测试部分【一】
前置 我之前写了一个接口自动化平台的,后期因为一个原因删除了. 现在,在此平台的基础上,我又增加了性能/稳定性的功能 它的前端大概是这样: 数据解析: 图表展示: 我将稳定性及性能归与一套方案去编写, ...
- Java实现斗地主发牌(Collections工具类的应用)
package com.doudou_01; import java.util.ArrayList; import java.util.Collections; import java.util.Li ...
- fiddler抓包工具教程
Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的小功能 ...
- oracle表空间的创建及dmp 文件的导入
--用oracle系统权限的账号 登陆 -- 1.创建用户 create user u_name identified by "u_password"; --2.赋予权限 gran ...
- 《杜增强讲Unity之Tanks坦克大战》8-子弹碰撞处理
8 子弹碰撞处理 为了处理子弹打到坦克的伤害我们在这里新建一个Shell.cs 子弹有两种情况,碰到坦克炸开,没有碰到坦克则过2s子弹销毁. void Start () { Destroy (game ...
- bootstrap switch样式修改与多列等间距布局
先以一张图开启今天的随笔 今天实习遇到了switch按钮,小姐姐说用插件bootstrap switch来写,我第一次用这个插件,首先在引入方面就遇到了很多坑,先来总结一下bootstrap swit ...
- SICP读书笔记 3.5
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- 2018NOIP爆0记第二弹之day1
出门进了电梯 白底黑字的告示上只有一句话 善待你一生. 湖上的白天鹅和白鹭远远厮混成一点,抱着玻璃杯里装着的小菊花,又慢悠悠溜达去了实验楼. t1 原本写过原题,结果考场上死去活来也只搞出了个nlog ...