题目大意

  已知正整数$a_{0}$、$a_{1}$、$b_{0}$、$b_{1}$($1 \leq a_{0}, a_{1}, b_{0}, b_{1} \leq 2 \times 10^{9}$),设某未知正整数$x$满足:

  1. $x$和$a_{0}$的最大公约数是$a_{1}$;
  2. $x$和$b_{0}$的最小公倍数是$b_{1}$。

  请你求出有多满足条件的$x$。

题解

  方法有很多,这里给一种比较暴力的解法。

  $$\because  x \times b_{0} = \gcd(x, b_{0}) \times b_{1} \\ \therefore x = \frac{b_{1}}{b_{0}} \times \gcd(x, b_{0})$$

  我们只需要用$O(\sqrt{b_{0}})$的时间枚举$\gcd(x, b_{0})$,然后判断是否满足条件即可。

#include <iostream>

using namespace std;

int n;
int a0, a1, b0, b1;
int ans; int gcd(int a, int b)
{
int c;
while(b)
{
c = a % b;
a = b;
b = c;
}
return a;
} long long lcm(int a, int b)
{
return (long long)a * b / gcd(a, b);
} int main()
{
cin >> n;
int x;
while(n--)
{
cin >> a0 >> a1 >> b0 >> b1;
ans = ;
for(int i = ; i * i <= b0; ++i)
{
if(b0 % i) continue;
x = b1 / b0 * i;
if(gcd(x, a0) == a1 && lcm(x, b0) == b1) ++ans;
if(b0 / i == i) continue;
x = b1 / b0 * b0 / i;
if(gcd(x, a0) == a1 && lcm(x, b0) == b1) ++ans;
}
cout << ans << "\n";
}
return ;
}

参考程序

最新文章

  1. Servlet的生命周期+实现方式
  2. AutoMapper用法
  3. Apple Pay--iOS开发
  4. 时钟 IoTimer
  5. 《JavaScript高级程序设计》心得笔记-----第三篇章
  6. HDFS读写程序小测试
  7. [bzoj4410] [Usaco2016 Feb]Fence in
  8. Erlang Port 小心换行
  9. 为什么不要使用 async void?
  10. ios高级开发之多线程(一)
  11. odoo 11 实现多个字段对应一个查询参数的查询
  12. [codevs3342][绿色通道]
  13. mysql 语句 字段 和结构主键外键的增删改
  14. Java中输出正则表达式匹配到的内容
  15. SSM_CRUD新手练习(3)创建数据库
  16. Linux内核学习总结(final)
  17. 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem L. Stock Trading Robot 水题
  18. 权力的游戏第一季/全集Game of Thrones迅雷下载
  19. 1. DNN神经网络的前向传播(FeedForward)
  20. Flexbox + js实现滑动拼图游戏

热门文章

  1. nginx location配置讲解
  2. hr员工数据分析(实战)
  3. JuniorCTF - Web - blind
  4. 2018-08-15-weekly
  5. python字符串前面的u,还有r
  6. 测试tensorflowgpu版本是否可用
  7. 科讯使用的:ckeditor编辑器.复制word图片.一直沾不上去.谁有好的解决办法呢
  8. C# 图片剪切与缩小的实例
  9. linux的shell脚本运行python程序
  10. 设置Select下拉多选框功能,赋值与绑定问题