cf1499D. The Number of Pairs

cf1499D. The Number of Pairs

题意:

有t组询问,每组询问给定三个整数c,d,x
问有多少对(a,b)使得c∗lcm(a,b)−d∗gcd(a,b)=xc*lcm(a,b)-d*gcd(a,b)=xclcm(a,b)dgcd(a,b)=x
1<=t<=1e4,1<=c,d,x<=1e71<=t<=1e4,1<=c,d,x<=1e71<=t<=1e4,1<=c,d,x<=1e7

题解:

可以这样设
a=p∗k,b=q∗ka=p*k,b=q*ka=pk,b=qk,那么lcm(a,b)=p∗q∗k,gcd(a,b)=klcm(a,b)=p*q*k,gcd(a,b)=klcm(a,b)=pqkgcd(a,b)=k,其中p和q是互质的

将这些值带入数字中得:c∗p∗q∗k−d∗k=xc*p*q*k-d*k=xcpqkdk=x
两边同时除以k
c∗p∗q−d=xkc*p*q-d=\frac{x}{k}cpqd=kx
k必须被x整除这个式子才成立
x=t∗kx=t*kx=tk
那么c∗p∗q−d=tc*p*q-d=tcpqd=t, t是x的因子
继续化简
pq=t+dcpq=\frac{t+d}{c}pq=ct+d,c必须是t+d的因子式子才成立
s=t+dcs=\frac{t+d}{c}s=ct+d
那么p∗q=sp*q=spq=s
我们之前已经定义了p和q是互质的,而p和q又是s的因子,因此就是看s有多少个不同的质因子数量,如果有num个,两两可以组成(a,b)对,因此就有2num2^{num}2num
如何求一个数有多少个不同的质因子数量,我们可以在线性筛的过程中求出
这样对于每次询问,我们先求出x的所有因子t,然后判断t+d是否是c的倍数,答案就是1<<((t+d)/c)
注意,线性筛要求2e7以内的,因为((t+d)/c)最大可以到2e7

代码:

// Problem: D. The Number of Pairs
// Contest: Educational Codeforces Round 106 (Rated for Div. 2)
// URL: https://codeforces.com/contest/{getProblemIndexes(problemCurrentPageList[i][0])[0]}/problem/D
// Memory Limit: 512 MB
// Time Limit: 2000 ms
// By Jozky#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{
#ifdef ONLINE_JUDGE
#elsestartTime= clock();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{
#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn= 2e7 + 20;
int prime[maxn];
int vis[maxn];
ll num[maxn];
int cnt= 0;
void Prime(int N)
{for (int i= 2; i <= N; i++) {if (!vis[i]) {prime[++cnt]= i;num[i]= 1;}for (int j= 1; j <= cnt && i * prime[j] <= N; j++) {vis[i * prime[j]]= 1;if (i % prime[j] == 0) {num[i * prime[j]]= num[i];break;}num[i * prime[j]]= num[i] + 1;}}
}
int fac[maxn];
signed main()
{//rd_test();int t;read(t);Prime(20000010);while (t--) {int c, d, x;read(c, d, x);int tot= 0;for (int i= 1; i * i <= x; i++) {if (x % i != 0)continue;fac[++tot]= i;if (i * i != x)fac[++tot]= x / i;}ll ans= 0;for (int i= 1; i <= tot; i++) {if ((fac[i] + d) % c == 0) {int s= (fac[i] + d) / c;ans+= (1ll << num[s]);}}cout << ans << endl;}//Time_test();
}

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

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

相关文章

微软Build 2019大会.NET课程视频汇总

点击上方蓝字关注“汪宇杰博客”5月6日至8日&#xff0c;微软在西雅图召开了Build 2019开发者大会。我们关注的.NET领域也迎来了许多激动人心的改进。本文汇总了Build 2019大会上关于.NET的已经公开的视频&#xff0c;欢迎大家观看学习&#xff01;// 注意&#xff1a;以下视频…

Educational Codeforces Round 106 (Rated for Div. 2)

Educational Codeforces Round 106 (Rated for Div. 2) 题号题目知识点ADomino on WindowsillBBinary RemovalsCBinary Removals贪心DThe Number of Pairs推导EChaotic MergeFDiameter CutsGGraph Coloring

黑科技抢先尝 | Windows全新终端初体验(附代码Build全过程)

微软在几天前的build大会上展示了Windows Terminal的威力&#xff0c;由于官宣要在6月中旬才上Microsoft store&#xff0c;还有一个多月要等呢。好在代码已公布在 github, 于是决定自己 build 后体验一番。遇到不少坑&#xff0c;大概整理一下流程&#xff0c;分享给大家。如果…

二项式反演(非详细)

引入 二项式反演又名广义容斥定理 二项式反演可以表示成&#xff1a; f[n]∑i0n(−1)iCnigi⟺gn∑i0n(−1)iCnif[i]f[n]\sum_{i0}^n(-1)^iC_{n}^{i}g_{i}⟺g_{n}\sum_{i0}^{n}(-1)^iC_{n}^{i}f[i]f[n]∑i0n​(−1)iCni​gi​⟺gn​∑i0n​(−1)iCni​f[i] 常用表达为&#xff…

aelf帮助C#工程师10分钟零门槛搭建DAPP私有链开发环境

aelf是一个可扩展的去中心化云计算区块链平台&#xff0c;支持高性能合约并行执行、原生多链数据交互、存储使用高性能分布式数据库。aelf整个系统可以在windows、osx及linux运行&#xff0c;团队在osx环境下开发&#xff0c;基于.net core DAPP开发1.安装.net core及protobufh…

不容易系列之一

不容易系列之一 题意&#xff1a; n个数&#xff0c;求n个人错排(全部错误)的方案数 题解&#xff1a; 这题地推可以求&#xff0c;咱们这里用二项式反演来做 设f(i)为恰好有i个人错排f(i)为恰好有i个人错排f(i)为恰好有i个人错排&#xff0c;g(i)为最多i个人错排g(i)为最多…

Build 2019 上微软的开源动作有点不一样

微软今年举办的 Build 开发者大会可谓是抢足风头&#xff0c;大会第一天就放了不少大招&#xff1a;宣布新的命令行终端 Windows Terminal、Windows 10 的 Linux 子系统 WSL 2 将运行真正的 Linux 内核、跳过 .NET 4 宣布 .NET 5 的计划、宣布 Web 版本的 VS Code (Visual Stud…

P1437 [HNOI2004]敲砖块

P1437 [HNOI2004]敲砖块 题意&#xff1a; 在一个凹槽中放置了 n 层砖块、最上面的一层有 n 块砖&#xff0c;从上到下每层依次减少一块砖。每块砖都有一个分值&#xff0c;敲掉这块砖就能得到相应的分值&#xff0c;如下图所示&#xff1a; 14 15 4 3 2333 33 76 22 …

在kubernetes 集群内访问k8s API服务

所有的 kubernetes 集群中账户分为两类&#xff0c;Kubernetes 管理的 serviceaccount(服务账户) 和 useraccount&#xff08;用户账户&#xff09;。基于角色的访问控制&#xff08;“RBAC”&#xff09;使用“rbac.authorization.k8s.io”API 组来实现授权控制&#xff0c;允…

C. 奇奇怪怪的魔法阵(未搞懂)

C. 奇奇怪怪的魔法阵 题意&#xff1a; n个点m条边&#xff0c;定义集合S为独立集&#xff0c;当且仅当任意x,y∈S&#xff0c;x与y之间没有边。空集也是独立集 现在对于每一个点的集合T&#xff0c;有多少子集为独立集 设N0,1,…,n-1,AT∑S⊂T[S是独立集]A_{T}\sum_{S⊂T}[S…

.NET Core之只是多看了你一眼

技术学习是一件系统性的事情&#xff0c;如果拒绝学习&#xff0c;那么自己就会落后以至于被替代。.NET也是一样&#xff0c;当开源、跨平台成为主流的时候&#xff0c;如果再故步自封&#xff0c;等待.NET的就是死路一条&#xff0c;幸好.NET Core问世了&#xff0c;社区反响积…

Educational Codeforces Round 111 (Rated for Div. 2)

Educational Codeforces Round 111 (Rated for Div. 2) 题号题目知识点AFind The ArrayBMaximum Cost DeletionCManhattan SubarraysDExcellent Arrays组合数学思维EStringforces状压dpFJumping Aroundboruvka算法

TOTP 介绍及基于 C# 的简单实现

TOTP 介绍及基于 C# 的简单实现IntroTOTP 是基于时间的一次性密码生成算法&#xff0c;它由 RFC 6238 定义。和基于事件的一次性密码生成算法不同 HOTP&#xff0c;TOTP 是基于时间的&#xff0c;它和 HOTP 具有如下关系&#xff1a;TOTP HOTP(K, T)HOTP(K,C) Truncate(HMAC-…

微软携手红帽,共筑开源新未来

官宣了&#xff0c;官宣了&#xff01;微软携手红帽正式推出重要力作Global Azure 公有云第一款联合管理的 OpenShift 产品&#xff0c;业界欢腾&#xff01;自此&#xff0c;微软在拥抱云计算开源之路上&#xff0c;多了一股强劲的推动力。5月初刚刚举办的全球 Red Hat Summit…

CF1550D Excellent Arrays(完全会了更新)

CF1550D Excellent Arrays 题意&#xff1a; 定义一个长度为n的整数序列a是好的仅当对于任意整数i∈[1,n]&#xff0c;都有ai!ia_i !iai​!i 设F(a)等于满足1<i<j<n,aiajija_ia_jijai​aj​ij的(i,j)对数 我们定义一个长度为n的序列a是完美的&#xff0c;仅当&#…

.NET Core 3.0之深入源码理解Startup的注册及运行

开发.NET Core应用&#xff0c;直接映入眼帘的就是Startup类和Program类&#xff0c;它们是.NET Core应用程序的起点。通过使用Startup&#xff0c;可以配置化处理所有向应用程序所做的请求的管道&#xff0c;同时也可以减少.NET应用程序对单一服务器的依赖性&#xff0c;使我们…

置换群,Polya引理和burnside引理(等价类计数问题)

参考文章&#xff1a; 等价类计数问题 Burnside引理&Plya定理 Burnside引理与Polya定理 置换群和Burnside引理&#xff0c;Polya定理 概念引入&#xff1a; 离散数学应该学过置换群的相关概念&#xff0c;置换本质就是映射&#xff0c;可以理解成一个正方形绕其中心逆时针…

时隔两年的重大更新,微软发布.NET Framework 4.8

微软发布了.NET Framework 4.8&#xff0c;这是两年来.NET 框架的第一个重大更新。新版本包含多个产品领域的改进&#xff0c;其中包括 Windows 窗体、WCF、WorkFlow 和 WPF。它还在基类库&#xff08;BCL&#xff09;和通用语言运行时&#xff08;CLR&#xff09;中有一些更新…

P1446 [HNOI2008]Cards

P1446 [HNOI2008]Cards 题意&#xff1a; 有n张牌&#xff0c;染三种颜色&#xff0c;每种颜色规定数目&#xff0c;给出m种不同的洗牌方法。两种染色方法相同当且仅当其中一种可以通过任意的洗牌法&#xff08;即可以使用多种洗牌法&#xff0c;而每种方法可以使用多次&…

EventStore文件存储设计

背景ENode是一个CQRSEvent Sourcing架构的开发框架&#xff0c;Event Sourcing需要持久化事件&#xff0c;事件可以持久化在DB&#xff0c;但是DB由于面向的是CRUD场景&#xff0c;是针对数据会不断修改或删除的场景&#xff0c;所以内部实现会比较复杂&#xff0c;性能也相对比…