[CF1016G]Appropriate Team
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的更多相关文章
- 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 ...
- Create a Team in RHEL7
SOLUTION VERIFIED September 13 2016 KB2620131 Environment Red Hat Enterprise Linux 7 NetworkManager ...
- Team Leader 你不再只是编码, 来炖一锅石头汤吧
h3{ color: #000; padding: 5px; margin-bottom: 10px; font-weight: bolder; background-color: #ccc; } h ...
- 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 ...
- BZOJ 4742: [Usaco2016 Dec]Team Building
4742: [Usaco2016 Dec]Team Building Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 21 Solved: 16[Su ...
- 关于 feature team 的一些内容
矩阵式管理,是常见的经典管理架构.其最早起源于美国的航空航天部门,然后被美国人带到了日本,然后被日本人带到了台湾,然后台湾人带到大陆...矩阵管理最典型的特征是,组织架构按职能与专业划分,项目由跨越部 ...
- 病毒四度升级:安天AVL Team揭露一例跨期两年的电信诈骗进化史
自2014年9月起,安天AVL移动安全团队持续检测到一类基于Android移动平台的间谍类病毒,病毒样本大多伪装成名为"最高人民检察院"的应用.经过反编译逆向分析以及长期的跟踪调查 ...
- iOS 真机测试时报错:Provisioning profile "iOS Team Provisioning Profile: XXX” doesn't include the currently selected device “XXX”.
这几天因工作需要,去给客户演示iOS项目打包的过程.之前演示都是顺利的,但后来客户自己操作时打电话说遇到了问题,出现报错. 就过去看了一下,发现一个很陌生的错误提示: The operation co ...
- 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 ...
随机推荐
- mysql8新特性(一)
https://www.oschina.net/news/95325/mysql-8-0-ga-released http://blog.itpub.net/28218939/viewspace-21 ...
- CCPC-Wannafly Winter Camp Day1 (Div2, onsite)
Replay Dup4: 要是不挂机,再多仔细想想就好了 J确实自闭好久,一直在想正确性,最后数据错了,喵喵喵? 还是要保证充足的休息啊,中间睡了一小会儿,也不知道睡了多久,醒来他们就又过了一道 要发 ...
- Python 在字符串中处理html 和xml
问题: 想将HTML 或者XML 实体如&entity; 或&#code; 替换为对应的文本.再者,你需要转换文本中特定的字符(比如<, >, 或&). 解决方案: ...
- [one day one question] webpack 打包报错 Cannot assign to read only property 'exports' of object '#<Object>'
问题描述: webpack 打包报错 Cannot assign to read only property 'exports' of object '#<Object>',这怎么破? 解 ...
- Java的Servlet、Filter、Interceptor、Listener
写在前面: 使用Spring-Boot时,嵌入式Servlet容器可以通过扫描注解(@ServletComponentScan)的方式注册Servlet.Filter和Servlet规范的所有监听器( ...
- java第四天
p32~p36: 学习javadoc 1.第一步,打开一个一定规模的java项目 2.第二步,搭建测试环境 IntelliJ IDEA ——> Tools ——> Generate Jav ...
- Activiti工作流引擎简介
Activiti工作流引擎简介 一.概述 Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活 ...
- Windows Shell编程之如何编写为文件对象弹出信息框的Shell扩展
有关COM编程资料 转载:http://www.cnblogs.com/lzjsky/archive/2010/11/22/1884702.html 活动桌面引入一项新特性, 当你在某些特定对象上旋停 ...
- Elasticsearch之中文分词器插件es-ik(博主推荐)
前提 什么是倒排索引? Elasticsearch之分词器的作用 Elasticsearch之分词器的工作流程 Elasticsearch之停用词 Elasticsearch之中文分词器 Elasti ...
- SDN原理 OpenFlow协议 -3
问题4:流表匹配 OF1.1版本 这是OF1.1版本的操作,引入了多流表,1.0版本并没有多流表. 多流表的匹配称为 流水线处理:交换机从流表0开始查找,按照流表序号从小到大匹配. 每个包按照优先级去 ...