题意:求满足条件的(i,j)对数:\(gcd(v,a_i)=x,lcm(v,a_j)=y\)

题解:\(x|a_i,a_j|y\),\(x|y\),考虑质因子p,假设a_i中p次数为a,x中次数为b,y为c,\(a_j\)为d;a>=b,c>=d.

假设a>b,c>d,那么由于\(gcd(v,a_i)=x\),v中p的次数为b,由于\(lcm(v,a_j)=y\),那么\(max(b,d)==c\),又c>d,所以b=c<a和x|y矛盾,所以此时ij不满足条件

其他情况同理,能证明当a>b,c>d不同时满足时,都能,满足条件,考虑y的质因子只有15个,二进制状压,表示1为a>b,0为a==b,那么当两个二进制数and起来为0时,ij对满足条件.

分解质因子用泼辣的肉,and用fwt或者sosdp都行

//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize(4)
//#pragma GCC optimize("unroll-loops")
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include<bits/stdc++.h>
#define fi first
#define se second
#define db double
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1000000009
#define ld long double
//#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
#define ull unsigned long long
//#define base 1000000000000000000
#define fin freopen("a.txt","r",stdin)
#define fout freopen("a.txt","w",stdout)
#define fio ios::sync_with_stdio(false);cin.tie(0)
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
template<typename T>inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
template<typename T>inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}
inline ll qm(ll a,ll b,ll c){ll ans=0;while(b){if(b&1)ans=(ans+a)%c;a=(a+a)%c;b>>=1;}return ans%c;}
inline ll qpow(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=qm(ans,a,c)%c;a=qm(a,a,c)%c;b>>=1;}return ans;} using namespace std; const ull ba=233;
const db eps=1e-10;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=200000+10,maxn=100000+10,inf=0x3f3f3f3f; int cnt;
ll f[110];
bool check(ll a,ll n,ll x,ll sum){
ll judge=qpow(a,x,n);
if (judge==n-1||judge==1)return 1;
while (sum--){
judge=qm(judge,judge,n);
if (judge==n-1)return 1;
}
return 0;
}
bool miller(ll n){
if (n<2)return 0;
if (n==2)return 1;
if ((n&1)==0)return 0;
ll x=n-1,sum=0;
while (x%2==0)x>>=1,sum++;
for (ll i=1;i<=20;i++){
ll a=rand()%(n-1)+1;
if (!check(a,n,x,sum))return 0;
}
return 1;
}
ll pollard(ll n,ll c){
ll x,y,d,i=1,k=2;
x=rand()%n;y=x;
while (1){
i++;
x=(qm(x,x,n)+c)%n;
d=gcd(y-x,n);
if (d<0)d=-d;
if (d>1&&d<n)return d;
if (y==x)return n;
if (i==k)y=x,k<<=1;
}
}
void Find(ll n){
if(n==1)return;
if (miller(n)){
f[cnt++]=n;
return ;
}
ll p=n;
while (p>=n) p=pollard(p,rand()%(n-1)+1);
Find(n/p);Find(p);
}
ll a[N],b[N],c[N];
int cal(ll x,ll y)
{
int ans=0;
while(x%y==0)ans++,x/=y;
return ans;
}
void fwt_and(ll *a,int n,int dft)
{
for(int i=1;i<n;i<<=1)
for(int j=0;j<n;j+=i<<1)
for(int k=j;k<j+i;k++)
{
if(dft==1)a[k]=a[k]+a[i+k];
else a[k]=a[k]-a[i+k];
}
}
int main()
{
int n;ll x,y;scanf("%d%lld%lld",&n,&x,&y);
if(y%x)return 0*puts("0");
Find(y);
sort(f,f+cnt);cnt=unique(f,f+cnt)-f;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
int p1=0,p2=0;
for(int j=0;j<cnt;j++)if(cal(x,f[j])!=cal(y,f[j]))
{
p1+=(1<<j)*(cal(a[i],f[j])>cal(x,f[j]));
p2+=(1<<j)*(cal(a[i],f[j])<cal(y,f[j]));
}
if(a[i]%x==0)b[p1]++;
if(y%a[i]==0)c[p2]++;
}
fwt_and(b,(1<<cnt),1);fwt_and(c,(1<<cnt),1);
for(int i=0;i<(1<<cnt);i++)b[i]=b[i]*c[i];
fwt_and(b,(1<<cnt),-1);
printf("%lld\n",b[0]);
return 0;
}
/******************** ********************/
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize(4)
//#pragma GCC optimize("unroll-loops")
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include<bits/stdc++.h>
#define fi first
#define se second
#define db double
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1000000009
#define ld long double
//#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
#define ull unsigned long long
//#define base 1000000000000000000
#define fin freopen("a.txt","r",stdin)
#define fout freopen("a.txt","w",stdout)
#define fio ios::sync_with_stdio(false);cin.tie(0)
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
template<typename T>inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
template<typename T>inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}
inline ll qm(ll a,ll b,ll c){ll ans=0;while(b){if(b&1)ans=(ans+a)%c;a=(a+a)%c;b>>=1;}return ans%c;}
inline ll qpow(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=qm(ans,a,c)%c;a=qm(a,a,c)%c;b>>=1;}return ans;} using namespace std; const ull ba=233;
const db eps=1e-10;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=200000+10,maxn=100000+10,inf=0x3f3f3f3f; int cnt;
ll f[110];
bool check(ll a,ll n,ll x,ll sum){
ll judge=qpow(a,x,n);
if (judge==n-1||judge==1)return 1;
while (sum--){
judge=qm(judge,judge,n);
if (judge==n-1)return 1;
}
return 0;
}
bool miller(ll n){
if (n<2)return 0;
if (n==2)return 1;
if ((n&1)==0)return 0;
ll x=n-1,sum=0;
while (x%2==0)x>>=1,sum++;
for (ll i=1;i<=20;i++){
ll a=rand()%(n-1)+1;
if (!check(a,n,x,sum))return 0;
}
return 1;
}
ll pollard(ll n,ll c){
ll x,y,d,i=1,k=2;
x=rand()%n;y=x;
while (1){
i++;
x=(qm(x,x,n)+c)%n;
d=gcd(y-x,n);
if (d<0)d=-d;
if (d>1&&d<n)return d;
if (y==x)return n;
if (i==k)y=x,k<<=1;
}
}
void Find(ll n){
if(n==1)return;
if (miller(n)){
f[cnt++]=n;
return ;
}
ll p=n;
while (p>=n) p=pollard(p,rand()%(n-1)+1);
Find(n/p);Find(p);
}
ll a[N];
int b[N],c[N];
int cal(ll x,ll y)
{
int ans=0;
while(x%y==0)ans++,x/=y;
return ans;
}
int main()
{
int n;ll x,y;scanf("%d%lld%lld",&n,&x,&y);
if(y%x)return 0*puts("0");
Find(y);
sort(f,f+cnt);cnt=unique(f,f+cnt)-f;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
int p1=0,p2=0;
for(int j=0;j<cnt;j++)if(cal(x,f[j])!=cal(y,f[j]))
{
p1+=(1<<j)*(cal(a[i],f[j])>cal(x,f[j]));
p2+=(1<<j)*(cal(a[i],f[j])<cal(y,f[j]));
}
if(a[i]%x==0)b[p1]++;//,printf("%d %d\n",i,p1);
c[i]=p2;
}
for(int i=0;i<cnt;i++)for(int j=0;j<(1<<cnt);j++)
if(j&(1<<i))b[j]+=b[j^(1<<i)];
ll ans=0;
for(int i=1;i<=n;i++)
{
if(y%a[i]!=0)continue;
ans+=b[((1<<cnt)-1)^c[i]];
// printf("%d %d\n",((1<<cnt)-1)^c[i],b[((1<<cnt)-1)^c[i]]);
}
printf("%lld\n",ans);
return 0;
}
/******************** ********************/

Educational Codeforces Round 48 (Rated for Div. 2)G. Appropriate Team的更多相关文章

  1. Educational Codeforces Round 48 (Rated for Div. 2) CD题解

    Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...

  2. Educational Codeforces Round 39 (Rated for Div. 2) G

    Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...

  3. Educational Codeforces Round 48 (Rated for Div. 2)

    http://codeforces.com/contest/1016 A. 没想到这个也会TLE,太粗心了 B. 暴力就好了,多情况讨论又出错... 思路跟我一样的解法   为什么我做了那么多讨论,原 ...

  4. Educational Codeforces Round 48 (Rated for Div. 2) B 1016B Segment Occurrences (前缀和)

    B. Segment Occurrences time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  5. Educational Codeforces Round 48 (Rated for Div. 2)异或思维

    题:https://codeforces.com/contest/1016/problem/D 题意:有一个 n * m 的矩阵, 现在给你 n 个数, 第 i 个数 a[ i ] 代表 i 这一行所 ...

  6. Educational Codeforces Round 48 (Rated for Div. 2)——A. Death Note ##

    A. Death Note time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  7. Educational Codeforces Round 48 (Rated for Div. 2) D 1016D Vasya And The Matrix (构造)

    D. Vasya And The Matrix time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  8. 【Educational Codeforces Round 48 (Rated for Div. 2) C】 Vasya And The Mushrooms

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然在没有一直往右走然后走到头再往上走一格再往左走到头之前. 肯定是一直在蛇形走位.. 这个蛇形走位的答案贡献可以预处理出来.很容易 ...

  9. 【Educational Codeforces Round 48 (Rated for Div. 2) D】Vasya And The Matrix

    [链接] 我是链接,点我呀:) [题意] 告诉你每一行.每一列的异或和. 让你求出一个符合要求的原矩阵. [题解] 显然应该有 a1^a2^....^an = b1^b2^....^bn 也即两边同时 ...

随机推荐

  1. (转) Dissecting Reinforcement Learning-Part.2

    Dissecting Reinforcement Learning-Part.2 Jan 15, 2017 • Massimiliano Patacchiola 原文链接:https://mpatac ...

  2. Component 初识组件

    component组件是Vue学习的重点.重点.重点,重要的事情说三遍.所以你必须学好Vue component.其实组件就是制作自定义的标签,这些标签在HTML中是没有的.比如:<diy> ...

  3. HDU 4311 Meeting point-1(曼哈顿距离最小)

    http://acm.hdu.edu.cn/showproblem.php?pid=4311 题意:在二维坐标中有n个点,现在要从这n个点中选出一个点,使得其他点到该点的曼哈顿距离总和最小. 思路: ...

  4. 如何创建R包并将其发布在 CRAN / GitHub 上--转载

    转载--https://www.analyticsvidhya.com/blog/2017/03/create-packages-r-cran-github/ 什么是 R 包?我开始创建 R 包的原因 ...

  5. 更新:在MAC上安装RN开发环境的步骤(全)

    总共分为三部: 1:按照官网(中文)上的步骤去安装jdk和android studio 2:配置SDK 3:安装虚拟机和模拟器 所以这里提出的是注意事项: 1:~/.bash_profile 文件里面 ...

  6. vs2013 报错error C1083: 无法打开包括文件:“gl\glew.h”: No such file or directory\

    vs报错诸如如无法打开“gl\xxx.h”时, 解决方法: 1.去http://glew.sourceforge.net/下载相关文件,2.在下载下来的文件里找到xxx.h,将其复制到vs的相关目录下 ...

  7. IIS7 配置Http重定向到Https

    1.注意首先要安装url重定向模块 微软官方地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=7435 百度网盘地址:链接: ht ...

  8. [转]C++中const、volatile、mutable的用法

    原文:https://blog.csdn.net/imJaron/article/details/79657642 const意思是“这个函数不修改对象内部状态”. 为了保证这一点,编译器也会主动替你 ...

  9. centos7在upgrade的时候显示:Delta RPMs disabled because /usr/bin/applydeltarpm not installed

    前面安装信息,太多,省略 总计:113 MIs this ok [y/d/N]: yDownloading packages:Delta RPMs disabled because /usr/bin/ ...

  10. Qt基本布局(QLayout)

    概述 Qt提供了QHBoxLayout类(水平排列布局),QVBoxLayout类(垂直排列布局),QGridLayout类(网格排列布局)等基本布局管理.它们之间的继承关系如下图 布局中常用的方法有 ...