洛谷 P1072 Hankson 的趣味题 题解
2024-10-07 04:36:36
提前知识:gcd(a/d,b/d)*d=gcd(a,b);
lcm(a,b)=a*b/gcd(a,b);
那么可以比较轻松的算出:gcd(x/a1,a0/a1)==gcd(b1/b0,b1/x)==1;
那么我们求解的x仅仅从b1的因数中挑选就可以,x要符合以上条件且x%a1==0;
时间复杂度是O(sqrt(b1)*n+log(n));
#include <iostream>
#include <cstring>
#include <cmath>
#define cin std::ios::sync_with_stdio(false); cin
#define cout std::ios::sync_with_stdio(false); cout
using namespace std;
int a0,a1,b0,b1;
int tmp[];
int gcd(int a,int b)
{
if(!b) return a;
return gcd(b,a%b);
}
int main()
{
register int t;
cin>>t;
while(t--){
cin>>a0>>a1>>b0>>b1;
memset(tmp,,sizeof(tmp));
tmp[]=;
int op=sqrt(b1);
for(register int i=;i<=op;i++){
if(b1%i==) tmp[++tmp[]]=i;
}
int ans=;
for(register int i=;i<=tmp[];i++){
if(tmp[i]%a1==&&gcd(tmp[i]/a1,a0/a1)==&&gcd(b1/b0,b1/tmp[i])==){
++ans;
}
register int y=b1/tmp[i];
if(tmp[i]==y) continue;
if(y%a1==&&gcd(y/a1,a0/a1)==&&gcd(b1/b0,b1/y)==){
++ans;
}
}
cout<<ans<<endl;
}
}
最新文章
- nginx 配置https
- 字符数组和string判断是否为空行 NULL和0 namespace变量需要自己进行初始化
- js操纵css更改加载图片大小
- MongoDB—— 读操作 Core MongoDB Operations (CRUD)
- GDI+的常用类
- USACO Section 5.3 Milk Measuring (IDDFS+dp)
- Xcode6在10.9.4上面crash解决
- BZOJ-1012-[JSOI2008]最大数maxnumber(线段树)
- BZOJ 1115: [POI2009]石子游戏Kam [阶梯NIM]
- NEO从入门到开窗(4) - NEO CLI
- css--父元素塌陷
- 《Python》网络编程之验证客户端连接的合法性、socketserver模块
- 逆序对__归并排序__树状数组 Inversions SGU - 180
- 二叉树 Java 实现 前序遍历 中序遍历 后序遍历 层级遍历 获取叶节点 宽度 ,高度,队列实现二叉树遍历 求二叉树的最大距离
- Java入门:基础算法之线性搜索
- JavaScript数组中的22个常用方法
- (a*b)%c 小的技巧
- GPU 编程入门到精通(四)之 GPU 程序优化
- [NOIP2017 TG D2T3]列队
- typeAliasesPackage 配置