洛谷P1072:https://www.luogu.org/problemnew/show/P1072

思路

gcd(x,a0)=a1

lcm(x,b0)=b1→b0*x=b1*gcd(x,b0) (由a*b=gcd(a,b)*lcm(a,b))

x=(b1/b0)*gcd(x,b0)

令i=gcd(x,b0)∈[1,√b0] 分成两半求减少时间复杂度 特判相等的时候

判断x=(b1/b0)*i和x=(b1/b0)*(b0/i)是否满足条件

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,a0,a1,b0,b1,ans;
int gcd(int a,int b)
{
if(b==) return a;
else
return gcd(b,a%b);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
ans=;
if(b1%b0!=)//不是整数
{
cout<<<<endl;
continue;
}
for(int j=;j*j<b0;j++)//枚举j=gcd(x,b0) 枚举一半即可
{
if(b0%j==)
{
int x=b1/b0*j;//公约数为j
if(gcd(x,b0)==j&&gcd(x,a0)==a1)
ans++;
x=b1/b0*(b0/j);//公约数为b0/j
if(gcd(x,b0)==b0/j&&gcd(x,a0)==a1)
ans++;
}
}
int k=int(sqrt(b0));//特殊情况 两者相等
if(k*k==b0)
{
int x=b1/b0*k;
if(gcd(x,b0)==k&&gcd(x,a0)==a1)
ans++;
}
cout<<ans<<endl;
}
}

最新文章

  1. 常用备份工具是mysql自带的mysqldump
  2. Html中代码换行造成空格间距的问题
  3. php json_decode 函数
  4. Node.js -- Router模块中有一个param方法
  5. 跟随标准与Webkit源码探究DOM -- 获取元素之querySelector,querySelectorAll
  6. 移动统计工具Flurry
  7. Codeforces Round #329 (Div. 2)
  8. 最简puremvc
  9. 2764: [JLOI2011]基因补全
  10. AngularJs学习笔记3-服务及过滤器
  11. find命令总结
  12. CSS布局之--各种居中
  13. 【zabbix教程系列】五、邮件报警设置(脚本方式)
  14. 图集内子图压缩及 ETC2 fallback选项的作用
  15. iis7 部署 mvc4项目提示404错误
  16. SQLSetConnectAttr
  17. 集合,ArrayList
  18. Express入门介绍vs实例讲解
  19. haproxy代理https配置方法【转】
  20. 手脱EXE32Pack v1.39

热门文章

  1. [Scala] Currying
  2. js 获取时间相关
  3. scss-@for 指令
  4. CSS文字有关属性
  5. javascript 权威指南
  6. PHP基础--strtr和str_replace字符替换函数
  7. 关于Linux系统使用遇到的问题-1:vi 打开只读(readonly)文件如何退出保存?
  8. (转)Android新的menu实现——ActionMode
  9. Resharper F12下载dll源码
  10. CSS3嵌入字体