题目链接


题目大意:

给你c,d,xc,d,xc,d,x求有多少对a,ba,ba,b,满足下面的式子?
c×lcm(a,b)−d×gcd(a,b)=xc \times lcm(a,b)-d\times gcd(a,b)=xc×lcm(a,b)−d×gcd(a,b)=x


解题思路:

这题目确实很妙啊!!
因为lcm(a,b)=a×bgcd(a,b)lcm(a,b)=\frac{a\times b}{gcd(a,b)}lcm(a,b)=gcd(a,b)a×b​如果直接代入得话会有gcd(a,b)2gcd(a,b)^2gcd(a,b)2那么我们看如何把这个处理掉

a=A×gcd(a,b)a=A\times gcd(a,b)a=A×gcd(a,b)
b=B×gcd(a,b)b=B\times gcd(a,b)b=B×gcd(a,b)
A⊥BA\perp BA⊥B

那么上面得lcm(a,b)=A×B×gcd(a,b)lcm(a,b)=A \times B \times gcd(a,b)lcm(a,b)=A×B×gcd(a,b)
那么替换上面式子
c×A×B×gcd(a,b)−d×gcd(a,b)=xc\times A \times B \times gcd(a,b) - d \times gcd(a,b)=xc×A×B×gcd(a,b)−d×gcd(a,b)=x
gcd(a,b)×(c×A×B−d)=xgcd(a,b)\times (c\times A\times B-d)=xgcd(a,b)×(c×A×B−d)=x
A×B=xgcd(a,b)+dcA\times B = \frac{\frac{x}{gcd(a,b)}+d}{c}A×B=cgcd(a,b)x​+d​

对于上面得式子我们知道gcd(a,b)∣x&&xgcd(a,b)+d∣cgcd(a,b)|x\&\&\frac{x}{gcd(a,b)}+d|cgcd(a,b)∣x&&gcd(a,b)x​+d∣c
对于x,c,dx,c,dx,c,d我们是知道的那么我们枚举gcd(a,b)gcd(a,b)gcd(a,b)就可以了
因为
A⊥BA\perp BA⊥B
那么对于式子右边的值里面的每一种质因PPP只能在AAA或者是BBB
那么就是∑2右边式子的值的质因子种类个数\sum 2^{右边式子的值的质因子种类个数}∑2右边式子的值的质因子种类个数

为了加速求解:我们要预处理出每个数包含的质因子种类数

我这里用的是欧拉筛欧拉筛欧拉筛
根据欧拉筛的性质,每个数都是被自己最小的那个只有质数筛掉:
设num[i]num[i]num[i]是第iii个数的质数种类个数

#include <bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define f first
#define s second
#define endl '\n'
using namespace std;
const int N = 2e6 + 10, mod = 1e9 + 9;
const int maxn = 20000010;
const long double eps = 1e-5;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x)
{x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args)
{read(first);read(args...);
}
int c, d, x;
int pri[maxn], cnt, num[maxn];
bool vis[maxn];
inline void init() {for(int i = 2; i < maxn; ++ i) {if(!vis[i]) pri[cnt ++] = i, num[i] = 1;for(int j = 0; j < cnt && i * pri[j] < maxn; ++ j) {vis[i * pri[j]] = 1;num[i * pri[j]] = num[i] + num[pri[j]] * (i % pri[j] != 0);if(i % pri[j] == 0) break; }}
}
int main() { IOS;init();int T;cin >> T;while(T --) {cin >> c >> d >> x;int ans = 0;for(int i = 1; i * i <= x; ++ i) {//枚举x约数if(x % i != 0) continue;int up = x / i + d;if(up % c == 0) ans += 1ll << num[up/c];if(i * i == x) break;int down = i + d;if(down % c == 0) ans += 1ll << num[down/c]; }           cout << ans << "\n";}
}

GCD or LCM ---- 处理gcd和lcm同时出现的情况 1499D - The Number of Pairs相关推荐

  1. CF1471 D - Strange Definition(思维,分类讨论,lcm,gcd的性质,数论)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #694 (Div. 2) D 很好的一道数论思维题 D - Str ...

  2. HDU - 4497 GCD and LCM 数论gcd

    传送门 文章目录 题意: 思路: 题意: 给三个数的lcmlcmlcm和gcdgcdgcd,求满足条件的三元组组合个数. 思路: 首先lcmmodgcd==0lcm\bmod gcd==0lcmmod ...

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

    传送门 文章目录 题意: 思路: 题意: 给三个数c,d,xc,d,xc,d,x,求满足c∗lcm(a,b)−d∗gcd(a,b)=xc*lcm(a,b)-d*gcd(a,b)=xc∗lcm(a,b) ...

  4. 用GCD线程组与GCD信号量将异步线程转换为同步线程

    用GCD线程组与GCD信号量将异步线程转换为同步线程 有时候我们会碰到这样子的一种情形: 同时获取两个网络请求的数据,但是网络请求是异步的,我们需要获取到两个网络请求的数据之后才能够进行下一步的操作, ...

  5. HDU 5869.Different GCD Subarray Query-区间gcd+树状数组 (神奇的标记右移操作) (2016年ICPC大连网络赛)...

    树状数组... Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/6 ...

  6. 【CodeForces - 1152C 】Neko does Maths(数学数论,lcm,gcd性质)

    题干: 给出a,b<=1e9,你要找到最小的k使得lcm(a+k,b+k)尽可能小,如果有多个k给出同样的最小公倍数,输出最小的一个k. 解题报告: 因为题目中k太多了,先化简一下公式,假设a& ...

  7. 最大公约数(GCD)算法与最小公倍数(LCM)算法-C++实现

    int gcd(int m, int n) {return m % n == 0 ? n : gcd(n, m % n); }int lcm(int a, int b) {return a * b / ...

  8. gcd常见结论及gcd与斐波那契结合--hdu6363.

    结论: http://acm.hdu.edu.cn/showproblem.php?pid=6363 f[d]表示d|gcd(x1,x2,...,xk)的方案数 d|gcd(x1,x2,..,xk)= ...

  9. hdu-3071 Gcd Lcm game---质因数分解+状态压缩+线段树

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3071 题目大意: 给定一个长度为n的序列m次操作,操作的种类一共有三种 查询 L :查询一个区间的所 ...

最新文章

  1. 未来几年,BCH超越BTC的路径是什么?
  2. vue3 创建路由「vue-router 4.x 的使用」
  3. 一张图读懂哔哩哔哩2019Q1财报
  4. Webpack打包构建太慢了?试试几个方法
  5. 使用NUnit进行DotNet程序测试
  6. android sdk system images,Android SDK下边tools、platform-tools、system-images、sources等目录的作用...
  7. hashmap value占用空间大小_如何获取 java hashmap占用存储空间空间大小
  8. 【Django】The view userWeb.views. didn‘t return an HttpResponse object. It returned None instead.
  9. sudo spctl --master-disable_2020推荐聊城灭火器检测--正规企业--【聊城市久安消防】...
  10. vue 安装 axios
  11. zlog的安装与使用
  12. 最后冲刺—信息系统开发与管理
  13. oracle数据库学习笔记(二)(创建表、DDL、DML、单行插入数据、多行插入数据)
  14. java list 随机获取n个_java – 从列表中取n个随机元素?
  15. HR人力资源系统管理源码
  16. C++实现双人中国象棋(一)——算法篇(附完整代码)
  17. python大作业报告_python大作业含报告 相关实例(示例源码)下载 - 好例子网
  18. 联通无线猫3G转换WiFi是不是鸡肋?
  19. 一篇文章让你瞬间知道Mybatis框架是如何使用的
  20. awk 根据分隔符解析文件并取值

热门文章

  1. MATLAB_edge()
  2. 用于自动驾驶的实时车道线检测和智能告警
  3. 经验 | OpenCV图像旋转的原理与技巧
  4. 你了解如何评估模型吗?
  5. HI3519安装SDK错误
  6. flask 控制台输出到文件
  7. 草根seo站长利用网站赚钱的方法
  8. h5做的app和原生app的区别
  9. Angular:Promise.all()的具体应用
  10. Powershell获取当前机器的序列号用户名域