题意:求满足条件的(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. Kibana --> Getting Started -->Building your own dashboard

    https://www.elastic.co/guide/en/kibana/6.6/tutorial-build-dashboard.html Building your own dashboard ...

  2. ssm项目部署到服务器过程

    ssm项目部署到服务器过程 特别篇 由于准备春招,所以希望各位看客方便的话,能去github上面帮我Star一下项目 https://github.com/Draymonders/Campus-Sho ...

  3. c# 之系统环境安装

    在重装系统后,对一些原有软件进行了卸载,不知道是什么原因总是提示vs2015 需安装IE10,但是又碰到ie10的一些插件不适合此系统.网上介绍的vs修复没有任何作用 最后找到方法是:重装系统,然后不 ...

  4. Docker:Swarms

    Prerequisites Install Docker version 1.13 or higher. Get Docker Compose as described in Part 3 prere ...

  5. .net core 问题:413 Request Entity Too Large nginx

    https://stackoverflow.com/questions/38698350/increase-upload-file-size-in-asp-net-core The other ans ...

  6. facebook api之Marketing API

    General information on the Marketing APIs, access, versioning and more. The main use cases for the M ...

  7. HDU 4325 Flowers(树状数组+离散化)

    http://acm.hdu.edu.cn/showproblem.php?pid=4325 题意:给出n个区间和m个询问,每个询问为一个x,问有多少个区间包含了x. 思路: 因为数据量比较多,所以需 ...

  8. [从零开始搭网站七]CentOS上安装Mysql

    点击下面连接查看从零开始搭网站全系列 从零开始搭网站 通过前面6章,我们买好了服务器,配置了服务器连接,服务器上配置了JDK和Tomcat,准备了域名(这个我没教,自己去阿里/百度/腾讯买,买东西我相 ...

  9. 【Mysql】【Navicat For Mac】Navicat Premium for Mac v12.0.23 + macOS Sierra 10.12.6

    参考地址:https://blog.csdn.net/womeng2009/article/details/79700667 [备注]我只用到了部分信息,就激活了 内容: Navicat Premiu ...

  10. Tarjan模板题——牛的舞会

    题目描述 约翰的N (2 <= N <= 10,000)只奶牛非常兴奋,因为这是舞会之夜!她们穿上礼服和新鞋子,别 上鲜花,她们要表演圆舞. 只有奶牛才能表演这种圆舞.圆舞需要一些绳索和一 ...