原题面:https://www.acwing.com/problem/content/202/

题目大意:gcd(x,a0)=a1,lcm(x,b0)=b1,问你有多少满足条件的正整数x。

输入描述:t组输入,第一行一个整数t,代表测试数据的组数。接下来t行,每行四个整数,a0,a1,b0,b1。

输出描述:对于每组测试数据,输出满足条件的x的个数。

输入样例:


输出样例:


分析:lcm(x,b0)=b1说明x一定是b1的因子,可以预处理跑出1e5范围内的质数,再对b1进行质因子分解,最后dfs枚举b1的因子,去检测是否满足gcd(x,a0)=a1&&lcm(x,b0)=b1,如果满足且不重复,则使答案加一。

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
typedef long long ll;
int n;ll a,b,c,d;
map<ll,int> vis;
int v[maxn];ll prime[maxn];int cnt,ans;
vector<ll> divisor;
ll gcd(ll a,ll b) {
return !b ? a : gcd(b, a % b);
}
ll lcm(ll a,ll b) {
return a * b / gcd(a, b);
}
void sieve() {
cnt = ;
memset(v, , sizeof(v));
for (int i = ; i < maxn; i++) {
if (!v[i]) {
v[i] = i;
prime[cnt++] = i;
}
for (int j = ; j < cnt; j++) {
if (v[i] < prime[j] || i * prime[j] >= maxn) break;
v[i * prime[j]] = prime[j];
}
}
}
void depart(ll d) {
divisor.clear();
for (int i = ; prime[i] * prime[i] <= d; i++) {
while (d % prime[i] == ) {
divisor.push_back(prime[i]);
d /= prime[i];
}
}
if (d > )
divisor.push_back(d);
}
void dfs(ll x,int p,int n) {
if (p == n) {
//cout<<x<<endl;
if (vis[x]) return;
vis[x] = ;
if (gcd(a, x) == c && lcm(b, x) == d)
ans++;
return;
}
dfs(x * divisor[p], p + , n);
dfs(x, p + , n);
}
//gcd(x,a0)=a1 lcm(x,b0)=b1
int main() {
sieve();
cin >> n;
while (n--) {
ans = ;
vis.clear();
cin >> a >> c >> b >> d;
depart(d);
dfs(, , divisor.size());
cout << ans << endl;
}
return ;
}

最新文章

  1. 清华学堂 LightHouse
  2. linux top命令
  3. Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件
  4. C/C++中的函数传值
  5. 主要协议SCSI、FC、iSCSI
  6. 怎样调通微信支付及微信发货通知接口(Js API)
  7. KMP算法的Next数组详解(转)
  8. uos事件控制块与任务同步
  9. 漫淡面向对象——POJO对象
  10. python 读取本地文件批量插入mysql
  11. window平台写的shell脚步在Linux不识别
  12. java构造器和构建器
  13. react 为组件添加样式
  14. Flutter之MaterialApp使用详解
  15. pytorch入门之安装和配置
  16. poi excel设置合并单元格边框格式
  17. 搭建harbor仓库、LDAP认证
  18. 查看mysql 库信息和表结构与表创建方法
  19. cnblogs修改网站图标icon
  20. workerman定时器使用

热门文章

  1. C++11通过拷贝构造器拷贝const字段(待解决)
  2. HIHOcoder编程总结
  3. Java程序基本优化
  4. sklearn调用SVM算法
  5. Html转图片 -- wkhtmltox
  6. C# Show()与ShowDialog()的区别-----转载
  7. 通过python 构建一个简单的聊天服务器
  8. day14-Python运维开发基础(内置函数、pickle序列化模块、math数学模块)
  9. VUE框架下安装自带http协议
  10. Mac安装jdk