CF1016G. Appropriate Team(Pollard-pho,FWT,数论)

CF1016G. Appropriate Team

Solution

相当于选出的两个数需要满足不存在一个质因子pppaia_iaippp的指数比XXX多,aja_jajppp的指数比YYY少。

我们用Pollard−phoPollard-phoPollardpho求出YYY所有最多151515个质因数,然后把所有能整除YYY的数表示为一个二进制数,表示该位上的指数相对于XXX是否增加,存到桶里,记为FFF;同样地再把相对YYY减的处理后的桶记作GGG

答案即为[x0](F&G)[x^0](F\&G)[x0](F&G),其中&\&&表示andandand卷积,FWTFWTFWT即可。

Code

#include <bits/stdc++.h>using namespace std;template<typename T> inline bool upmin(T &x, T y) { return y <= x ? x = y, 1 : 0; }
template<typename T> inline bool upmax(T &x, T y) { return x <= y ? x = y, 1 : 0; }#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se secondtypedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int, int> PR;
typedef vector<int> VI; const lod eps = 1e-9;
const lod pi = acos(-1);
const int oo = 1 << 30;
const ll loo = (1ll << 62) - 1;
const int MAXN = 1000005;
const int INF = 0x3f3f3f3f; //1061109567
/*--------------------------------------------------------------------*/namespace FastIO{constexpr int SIZE = (1 << 21) + 1;int num = 0, f;char ibuf[SIZE], obuf[SIZE], que[65], *iS, *iT, *oS = obuf, *oT = obuf + SIZE - 1, c;#define gc() (iS == iT ? (iT = ((iS = ibuf) + fread(ibuf, 1, SIZE, stdin)), (iS == iT ? EOF : *iS ++)) : *iS ++)inline void flush() {fwrite(obuf, 1, oS - obuf, stdout);oS = obuf;}inline void putc(char c) {*oS ++ = c;if (oS == oT) flush();}inline void getc(char &c) {for (c = gc(); !isalpha(c) && c != EOF; c = gc());}inline void reads(char *st) {char c;int n = 0;getc(st[++ n]);for (c = gc(); isalpha(c) ; c = gc()) st[++ n] = c;st[++ n] = '\0';}template<class I>inline void read(I &x) {for (f = 1, c = gc(); c < '0' || c > '9' ; c = gc()) if (c == '-') f = -1;for (x = 0; c >= '0' && c <= '9' ; c = gc()) x = (x << 3) + (x << 1) + (c & 15);x *= f;}template<class I>inline void print(I x) {if (x < 0) putc('-'), x = -x;if (!x) putc('0');while (x) que[++ num] = x % 10 + 48, x /= 10;while (num) putc(que[num --]);}inline void putstr(string st) {for (int i = 0; i < (int)st.size() ; ++ i) putc(st[i]);}struct Flusher_{~Flusher_(){flush();}} io_Flusher_;
}
using FastIO :: read;
using FastIO :: putc;
using FastIO :: putstr;
using FastIO :: reads;
using FastIO :: print;int a[20], b[20];
ll c[MAXN], f[MAXN], g[MAXN], P[20];
namespace Number_Theoretic{const int MX = 1e6;	map<ll, int> Map;int test[8] = {2, 3, 5, 7, 11, 13, 82, 373};int flag[MAXN], prime[MAXN], mn[MAXN], pnum = 0;ll Mul(ll x, ll y, ll mods) { return (__int128)x * y % mods; }ll quick_pow(ll x, ll y, ll mods) {ll ret = 1;for (; y ; y >>= 1) {if (y & 1) ret = Mul(ret, x, mods);x = Mul(x, x, mods);}return ret;}void Init(int n) {for (int i = 2; i <= n ; ++ i) {if (!flag[i]) prime[++ pnum] = i, mn[i] = pnum;for (int j = 1; j <= pnum && prime[j] * i <= n ; ++ j) {flag[prime[j] * i] = 1, mn[prime[j] * i] = j;if (!(i % prime[j])) break; }}}int Miller_Rabin(ll n) {if (n <= MX) return (n > 1) && (prime[mn[n]] == n);int c = 0; ll s = n - 1, u, v;for (; !(s & 1) ;) s >>= 1, ++ c;for (int i = 0; i < 8 ; ++ i) {if (!(n % test[i])) return 0;u = quick_pow(test[i], s, n);for (int j = 0; j < c ; ++ j, u = v) if (v = Mul(u, u, n), u != 1 && u != n - 1 && v == 1) return 0;if (u != 1) return 0;}	return 1;}ll Pollard_Rho(ll n, int c) {ll x = rand() % (n - 1) + 1, y = x, tmp = 1;for (int k = 2, nw = 1; k <= 131072 ; ) {x = (Mul(x, x, n) + c) % n;tmp = Mul(tmp, (y - x + n) % n, n);if (nw % 128 == 0 || nw + 1 == k) {ll t = __gcd(tmp, n); if (t != 1 && t != n) return t;tmp = 1;}if ((++ nw) == k) y = x, k <<= 1;}return 0;}void Push(ll x, int y) { Map[x] += y; }void Factor(ll n) {while (n > 1) {if (n <= MX) {int num = 0, p = prime[mn[n]];while (n % p == 0) n /= p, ++ num;Push(p, num);}else {ll p;if (Miller_Rabin(n)) { Push(n, 1); break; }for (int k = 97; !(p = Pollard_Rho(n, k)) ; -- k);n /= p, Factor(p);}}}
}
using namespace Number_Theoretic;void Fwt(ll *A, int n, int opt) {for (int i = 0; i < n ; ++ i)for (int j = 0; j < 1 << n ; ++ j)if (!((j >> i) & 1)) A[j] += A[j ^ (1 << i)] * opt;
}
signed main() {
#ifndef ONLINE_JUDGEfreopen("a.in", "r", stdin);
#endifInit(MX);int n, num = 0; ll X, Y, t;read(n), read(X), read(Y), t = X;for (int i = 1; i <= n ; ++ i) read(c[i]);if (Y % X) { print(0); return 0; }Factor(Y);for (auto v : Map) ++ num, P[num] = v.fi, b[num] = v.se;for (int j = 1; j <= num ; ++ j)while (t % P[j] == 0) t /= P[j], ++ a[j];for (int i = 1; i <= n ; ++ i) {int fa = 0, fb = 0; ll p = c[i];for (int j = 1; j <= num ; ++ j) {if (a[j] == b[j]) continue;int t = 0;while (p % P[j] == 0) p /= P[j], ++ t;
//			cout << c[i] << " " << P[j] << " " << t << " " << a[j] << endl;if (t != a[j]) fa |= (1 << (j - 1)); if (t != b[j]) fb |= (1 << (j - 1));}if (!(c[i] % X)) ++ f[fa];if (!(Y % c[i])) ++ g[fb];}Fwt(f, num, 1);Fwt(g, num, 1);for (int i = 0; i < 1 << num ; ++ i) f[i] = f[i] * g[i];Fwt(f, num, -1);print(f[0]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Exceptionless - .Net Core开源日志框架

作者&#xff1a;markjiang7m2原文地址&#xff1a;https://www.cnblogs.com/markjiang7m2/p/11020140.html官网地址&#xff1a;http://letyouknow.net今天要给大家介绍的Exceptionless是一个基于 .net core的开源日志框架&#xff0c;Exceptionless的意思是&#xff1a;没有异…

CF981E Addition on Segments 线段树分治 + bitset优化

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 我们考虑如果我们选择的区间都包含某个位置&#xff0c;那么这个位置一定是最大值。那么对于每个位置&#xff0c;我们枚举包含其的区间&#xff0c;让后每次加xxx都用bitsetbitsetbitset来…

CF1146F - Leaf Partition(树形dp)

CF1146F - Leaf Partition Solution 感觉做这种细节很多的分类讨论树形dp还是有点乱。 大概有一个naivenaivenaive的想法是&#xff0c;我们令fx,0/1f_{x,0/1}fx,0/1​表示以xxx为根的子树&#xff0c;xxx结点有没有颜色的方案数。 然后如果存在两个有颜色的儿子&#xff0…

开源基于Canal的开源增量数据订阅消费中间件

canal 是阿里巴巴开源的一款基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。我开发的这个CanalSync项目 https://github.com/yuzd/CanalSync >觉得不错帮忙给个star谢谢是基于canal-server之上的数据库同步&消费中间件&#…

E2. Square-free division (hard version) dp + 质因子分解

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你长度为nnn的数组&#xff0c;让后最多修改其中kkk个数(可以修改为任意数)&#xff0c;让后问你分成的最少组是多少。这个组内元素是连续的且不存在任意两个数的积为平方数。 思路&#xff1a; 首先两个…

CF1000G. Two-Paths(树形dp)

CF1000G. Two-Paths Solution 我们发现除了树上(x,y)(x,y)(x,y)最短路径上的边经过一次&#xff0c;其余边要么走000次&#xff0c;要么走222次。 因此考虑先假设每条边走两次&#xff0c;最后把走一次的边的贡献加上。 我们把从(x,y)(x,y)(x,y)路径上的点扩展出去连痛块的…

不装 VS 自己编译安装 Windows Terminal

Windows Terminal 一直没有发布可以直接安装的二进制文件&#xff0c;想自行编译的时候&#xff0c;看到系统需求中包含体积巨大的 Visual Studio 和 Windows SDK&#xff0c;脑袋都大了。直接下载其他人编译好的安装包又不放心&#xff0c;那么就想个办法避免在本地环境编译吧…

Codeforces Round #604 (Div. 2) E. Beautiful Mirrors 期望dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 要从111走到nnn&#xff0c;每次成功走下去的概率为pi100\frac{p_i}{100}100pi​​&#xff0c;如果不成功那就回到111号点继续走。问走完nnn个点的期望是多少。 思路&#xff1a; 以前见过这种失败了就回…

带你了解C#每个版本新特性

上学时学习C#和.NET&#xff0c;当时网上的资源不像现在这样丰富&#xff0c;所以去电脑城买了张盗版的VS2005的光盘&#xff0c;安装时才发现是VS2003&#xff0c;当时有一种被坑的感觉&#xff0c;但也正是如此&#xff0c;让我有了一个完整的.NET的学习生涯。一直都认为学习…

Educational Codeforces Round 106 (Rated for Div. 2) D. The Number of Pairs 数论gcd

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给三个数c,d,xc,d,xc,d,x&#xff0c;求满足c∗lcm(a,b)−d∗gcd(a,b)xc*lcm(a,b)-d*gcd(a,b)xc∗lcm(a,b)−d∗gcd(a,b)x条件的(a,b)(a,b)(a,b)的数量。 思路&#xff1a; 考虑将lcm(a,b)lcm(a,b)lcm(a,b…

从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目)

默认情况下&#xff0c;我们打包 NuGet 包时&#xff0c;目标项目安装我们的 NuGet 包会引用我们生成的库文件&#xff08;dll&#xff09;。除此之外&#xff0c;我们也可以专门做 NuGet 工具包&#xff0c;还可以做 NuGet 源代码包。然而做源代码包可能是其中最困难的一种了&…

HDU - 4497 GCD and LCM 数论gcd

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给三个数的lcmlcmlcm和gcdgcdgcd&#xff0c;求满足条件的三元组组合个数。 思路&#xff1a; 首先lcmmodgcd0lcm\bmod gcd0lcmmodgcd0是有组合的条件&#xff0c;否则输出0。 现在可知lcm(x′,y′,z′)lc…

.NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

我们都知道在6月12日的时候微软发布了.NET Core 3.0的第6个预览版。针对.NET Core 3.0的发布我们国内的微软MVP-汪宇杰还发布的官翻版的博文进行了详细的介绍。具体的可以点这里进行阅读译 | .NET Core 3.0 Preview 6 已发布。而我们这篇文章将会介绍本次更新中对ASP.NET Core和…

Codeforces Round #686 (Div. 3) F. Array Partition 二分 + 线段树

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 化简一下题意就是求满足max(1,x)min(x1,y)max(y1,n)max(1,x)min(x1,y)max(y1,n)max(1,x)min(x1,y)max(y1,n)的len1x,len2y−x,len3n−ylen1x,len2y-x,len3n-ylen1x,len2y−x,len3n−y。 思路&#xff1a; …

Dapper.Common基于Dapper的开源LINQ超轻量扩展

Dapper.CommonDapper.Common是基于Dapper的LINQ实现,支持.net core,遵循Linq语法规则、链式调用、配置简单、上手快,支持Mysql,Sqlserver(目前只实现了这两个数据库&#xff0c;实现其他数据库也很轻松)&#xff0c;支持单表&#xff0c;多表&#xff0c;自定义函数等功能。源码…

Codeforces Round #686 (Div. 3) E. Number of Simple Paths 基环树 + 容斥

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一颗基环树&#xff0c;求长度>1>1>1的路径个数。 思路&#xff1a; 先考虑一棵树&#xff0c;他的答案显然是n∗(n−1)2\frac{n*(n-1)}{2}2n∗(n−1)​。因为是个基环树&#xff0c;所以先考…

.NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖

我们有多种工具可以将程序集合并成为一个。比如 ILMerge、Mono.Merge。前者不可定制、运行缓慢、消耗资源&#xff08;不过好消息是现在开源了&#xff09;&#xff1b;后者已被弃用、不受支持且基于旧版本的 Mono.Cecil。而本文介绍用来替代它们的 ILRepack&#xff0c;使用 I…

4G的小程序与5G的Chromium OS?

提到桌面操作系统&#xff0c;Windows 与 macOS 自然是家喻户晓&#xff0c;稍微有点 IT 知识的人也会知道 Linux&#xff0c;而 Fuchsia 和鸿蒙&#xff08;方舟&#xff09;则还在积极开发中&#xff0c;除了这几大类比较热门的&#xff0c;当前还有一大潜力股 Chrome OS&…

Codefest 18 (rated, Div. 1 + Div. 2)-D-Valid BFS--思维--已知bfs序,求是否正确

Codefest 18 (rated, Div. 1 Div. 2)-D-Valid BFSvj地址 题意&#xff1a;给你一段bfs序列&#xff0c;让你判断是否正确 思路&#xff1a;先给节点排序&#xff08;很关键&#xff09; 我们给每一个的点的邻接表按照给出的bfs序列排序&#xff0c;排好后&#xff0c; 我跑一…

P3605 [USACO17JAN]Promotion Counting P dfs序

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 这个题可以用各种姿势a掉&#xff0c;树启和线段树合并都可以&#xff0c;比较无脑。下面给一个解决这种问题比较巧妙的做法。 考虑暴力怎么写&#xff0c;我们先将每个点的权值离散化一下…