codeforces

description

给你一个数组\(\{a_i\}\)以及\(X,Y\),问你有多少对\((i,j)\)满足存在一个\(v\in \mathbb{N}^+\)使得 \(\gcd(a_i,v)=X,\mbox{lcm}(a_j,v)=Y\)。\(i,j\)交换顺序被视为不同的数对,\(i,j\)可以相等。

\(n\le2\times10^5,a_i,X,Y\le10^{18}\)

sol

首先一定要有\(X|Y\),不然肯定无解。

假设\(Y=P_1^{mx_1}P_2^{mx_2}...P_k^{mx_k},X=P_1^{mn_1}P_2^{mn_2}...P_k^{mn_k}\)。

(\(mn_i\le mx_i\),\(mn_i\)可以为\(0\))

考虑如果\(\gcd(a_i,v)=X\),那么首先有\(X|a_i\),然后可以把\(a_i\)分解成\(a_i=P_1^{c_1}P_2^{c_2}...P_k^{c_k}\)。如果有某个\(c_i>mn_i\),那么\(v\)中\(P_i\)的次数就一定要是\(mn_i\)(不然\(\gcd\)中\(P_i\)的次数就大于\(mn_i\)了),否则可以任意。

我们状压记录对于每个\(a_i\),与它可以满足条件的\(v\)对于\(i\in[1,k]\)的\(P_i\)的次数是否一定要是\(mn_i\)。考虑到\(k\le15\),所以状态量也只有\(2^{15}\)。

然后我们考虑一个\(j\)可以和哪些\(i\)匹配。同理对于\(\mbox{lcm}(a_j,v)=Y\),我们也可以用一个\(2^{15}\)的状态表示\(P_i\)的次数是否一定要取\(mx_i\)。

剩下是工作就只有一个高维前缀和了。注意特判\(mn_i=mx_i\)的情况。

至于质因数分解。原题题解中有一种很神奇的方法。。。然而直接上\(\mbox{Pollard_Rho}\)不好吗。。。

code

#include<cstdio>
#include<algorithm>
#include<vector>
#include<ctime>
using namespace std;
#define ll long long
ll gi(){
ll x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
const int N = 2e5+5;
const int M = 15;
int n,tot,all,mx[M],mn[M],c[1<<M];
ll G,L,a[N],P[M*5],ans;
ll mul(ll x,ll y,ll mod){
x%=mod;y%=mod;ll res=0;
while (y){
if (y&1) {res+=x;if (res>=mod) res-=mod;}
x+=x;if (x>=mod) x-=mod;y>>=1;
}
return res;
}
ll fastpow(ll x,ll y,ll mod){
ll res=1;
while (y){
if (y&1) res=mul(res,x,mod);
x=mul(x,x,mod);y>>=1;
}
return res;
}
ll f[]={2,3,5,7,11,13,17,19,23,29};
bool MR(ll p){
for (int i=0;i<10;++i){
if (p<=f[i]) break;
if (fastpow(f[i],p-1,p)!=1) return false;
ll pp=p-1;
while (~pp&1){
pp>>=1;ll y=fastpow(f[i],pp,p);
if (mul(y,y,p)==1&&y!=1&&y!=p-1) return false;
}
}
return true;
}
ll PR(ll n,ll c){
ll i=0,k=2,x,y;x=y=1+rand()%(n-1);
while (1){
x=(mul(x,x,n)+c)%n;
ll d=__gcd((y-x+n)%n,n);
if (d!=1&&d!=n) return d;
if (x==y) return n;
if (++i==k) y=x,k<<=1;
}
}
void fact(ll n,ll c){
if (n==1) return;
if (MR(n)) {P[tot++]=n;return;}
ll p=n;while (p==n) p=PR(n,c--);
fact(p,233);fact(n/p,233);
}
int main(){
srand(19260817);n=gi();G=gi();L=gi();
for (int i=1;i<=n;++i) a[i]=gi();
if (L%G) return puts("0"),0;
fact(L,233);sort(P,P+tot);tot=unique(P,P+tot)-P;
for (int i=0;i<tot;++i){
ll x=G;while (x%P[i]==0) ++mn[i],x/=P[i];
x=L;while (x%P[i]==0) ++mx[i],x/=P[i];
}
all=(1<<tot)-1;
for (int i=1;i<=n;++i)
if (a[i]%G==0){
int zt=0;
for (int j=0;j<tot;++j){
ll x=a[i];int d=0;
while (x%P[j]==0) ++d,x/=P[j];
if (d>mn[j]) zt|=1<<j;
}
++c[zt];
}
for (int j=0;j<tot;++j)
for (int i=0;i<=all;++i)
if (i&(1<<j)) c[i]+=c[i^(1<<j)];// sum of subset
for (int i=1;i<=n;++i)
if (L%a[i]==0){
int zt=0;
for (int j=0;j<tot;++j){
ll x=a[i];int d=0;
while (x%P[j]==0) ++d,x/=P[j];
if (d==mx[j]||mx[j]==mn[j]) zt|=1<<j;
}
ans+=c[zt];
}
printf("%I64d\n",ans);return 0;
}

[CF1016G]Appropriate Team的更多相关文章

  1. Configure a VLAN on top of a team with NetworkManager (nmcli) in RHEL7

    SOLUTION VERIFIED September 13 2016 KB1248793 Environment Red Hat Enterprise Linux 7 NetworkManager ...

  2. Create a Team in RHEL7

    SOLUTION VERIFIED September 13 2016 KB2620131 Environment Red Hat Enterprise Linux 7 NetworkManager ...

  3. Team Leader 你不再只是编码, 来炖一锅石头汤吧

    h3{ color: #000; padding: 5px; margin-bottom: 10px; font-weight: bolder; background-color: #ccc; } h ...

  4. Configure bridge on a team interface using NetworkManager in RHEL 7

    SOLUTION IN PROGRESS February 29 2016 KB2181361 environment Red Hat Enterprise Linux 7 Teaming,Bridg ...

  5. BZOJ 4742: [Usaco2016 Dec]Team Building

    4742: [Usaco2016 Dec]Team Building Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 21  Solved: 16[Su ...

  6. 关于 feature team 的一些内容

    矩阵式管理,是常见的经典管理架构.其最早起源于美国的航空航天部门,然后被美国人带到了日本,然后被日本人带到了台湾,然后台湾人带到大陆...矩阵管理最典型的特征是,组织架构按职能与专业划分,项目由跨越部 ...

  7. 病毒四度升级:安天AVL Team揭露一例跨期两年的电信诈骗进化史

    自2014年9月起,安天AVL移动安全团队持续检测到一类基于Android移动平台的间谍类病毒,病毒样本大多伪装成名为"最高人民检察院"的应用.经过反编译逆向分析以及长期的跟踪调查 ...

  8. iOS 真机测试时报错:Provisioning profile "iOS Team Provisioning Profile: XXX” doesn't include the currently selected device “XXX”.

    这几天因工作需要,去给客户演示iOS项目打包的过程.之前演示都是顺利的,但后来客户自己操作时打电话说遇到了问题,出现报错. 就过去看了一下,发现一个很陌生的错误提示: The operation co ...

  9. diff/merge configuration in Team Foundation - common Command and Argument values - MSDN Blogs

    One of the extensibility points we have in Team Foundation V1 is that you can configure any other di ...

随机推荐

  1. 给iphone配置qq邮箱

    在手机上使用qq邮箱发送和接受邮件,但是又不用qq邮箱,我用的是“网易邮箱大师” ,那么就需要配置服务. 1.在qq邮箱中设置邮箱,开启相关的服务,然后用手机发送短信来生成授权码.最后在手机上设置的密 ...

  2. 162. Find Peak Element(二分查找 )

      A peak element is an element that is greater than its neighbors. Given an input array where num[i] ...

  3. 20145221 《Java程序设计》第一周学习总结

    20145221 <Java程序设计>第一周学习总结 教材学习内容总结 第一周内容已在假期完成,详见博客: Hello Java! 开源中国的代码托管 代码调试中的问题和解决过程 第一周内 ...

  4. Think in Java笔记——Java与对象

    最近在重新学习Java,在阅读Java的经典著作——Java编程思想,因此每天记录阅读的心得. 当听到Java这个词时,大家一般想到的是面向对象,确实Java相对于C/C++这两门语言来说,Java最 ...

  5. git仓库迁移的两种解决方案

    Git仓库迁移而不丢失log的方法 要求能保留原先的commit记录,应该如何迁移呢? 同时,本地已经clone了原仓库,要配置成新的仓库地址,该如何修改呢? 注意:如果使用了代码审核工具Gerrit ...

  6. linux下强制退出指定用户开启的伪终端

    一.环境 发行版:Ubuntu 18.04.1 LTS 代号:bionic 内核版本:4.15.0-30-generic 二.背景 每次通过ssh登陆服务器,但是超时后自动断开了与服务器的连接,因此在 ...

  7. NSwag给api加上说明

    参考http://petstore.swagger.io 给controller加上description https://github.com/RSuter/NSwag/issues/1803 xm ...

  8. SPOJ—VLATTICE Visible Lattice Points(莫比乌斯反演)

    http://www.spoj.com/problems/VLATTICE/en/ 题意: 给一个长度为N的正方形,从(0,0,0)能看到多少个点. 思路:这道题其实和能量采集是差不多的,只不过从二维 ...

  9. Android -- 加载大图片到内存,从gallery获取图片,获取图片exif信息

    1. 加载大图片到内存,从gallery获取图片 android默认的最大堆栈只有16M, 图片像素太高会导致内存不足的异常, 需要将图片等比例缩小到适合手机屏幕分辨率, 再加载. 从gallery ...

  10. [osgearth]Earth文件详解

    <!—type 属性可以是geocentric和projected两种模式,分别对应地心坐标系和平面投影坐标系,默认是地心坐标模式.Version是osgEarth的主版本号,必须有版本号--& ...