对于质因数分解理解还不到位。

此题可知$lcm$是$x$的倍数,$x$是$lcm$的约数,只要在$lcm$的分解质因数里对每一个质因子讨论种数即可。

具体来说,对于$lcm$的一个质因子$p$,讨论$a,b,c,d(也就是lcm)$关于$p$的幂次,然后比较大小,分类讨论得出种数。

实现上来看,只要在枚举$lcm$质因子过程中,一带把$a,b,c,d$全部除去这个因子,再比较幂次。

一些细节:

  • 一定要保证$b|d$,不解释。
  • 可能$a$包含$lcm$没有的质因子,但不影响讨论。
  • 枚举$1 \sim \sqrt{lcm}$来找$lcm$质因子,通过优化,只枚举$1 \sim \sqrt{lcm}$内质数(可预处理)可以降低复杂度。
  • 注意最后讨论有没有剩下的一个超过$\sqrt{lcm}$的质因子。
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define dbg(x) cerr << #x << " = " << x <<endl
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline char MIN(T&A,T B){return A>B?(A=B,):;}
template<typename T>inline char MAX(T&A,T B){return A<B?(A=B,):;}
template<typename T>inline void _swap(T&A,T&B){A^=B^=A^=B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int N=;
int prime[N],inshi[N+],n;
ll ans=;
int T,a,b,c,d,t1,t2,t3,t4,fl;
inline void preprocess(){
for(register int i=;i<=N;++i){
if(!inshi[i])prime[++n]=i;
for(register int j=;j<=n&&prime[j]<=N/i;++j){
inshi[i*prime[j]]=prime[j];
if(inshi[i]==prime[j])break;
}
}
} int main(){//freopen("son10.in","r",stdin);freopen("test.out","w",stdout);
preprocess();
read(T);while(T--){
read(a),read(b),read(c),read(d);
if(d%b){puts("");continue;}
ans=,fl=;
for(register int i=;prime[i]*prime[i]<=d;++i)if(d%prime[i]==){
t1=t2=t3=t4=;
while(d%prime[i]==)d/=prime[i],++t4;
while(c%prime[i]==)c/=prime[i],++t3;
while(b%prime[i]==)b/=prime[i],++t2;
while(a%prime[i]==)a/=prime[i],++t1;
if(t1==t2&&t3==t4&&t2<=t3)ans*=(t3-t2+);
else if(!(t1==t2&&t3<t4&&t2<=t4)&&!(t3==t4&&t1>t2&&t2<=t4)&&!(t1>t2&&t3<t4&&t2==t4)){fl=;break;}
}
if(!fl&&d^){
t4=,t3=c^?:,t2=b^?:,t1=a%d==?:;
if(t1==t2&&t3==t4&&t2<=t3)ans*=(t3-t2+);
else if(!(t1==t2&&t3<t4&&t2<=t4)&&!(t3==t4&&t1>t2&&t2<=t4)&&!(t1>t2&&t3<t4&&t2==t4))fl=;
}
if(fl)puts("");
else printf("%d\n",ans);
}
return ;
}

loj2589 「NOIP2009」Hankson 的趣味题的更多相关文章

  1. 「NOIP2009」Hankson 的趣味题

    Hankson 的趣味题 [内存限制:$128 MiB$][时间限制:$1000 ms$] [标准输入输出][题目类型:传统][评测方式:文本比较] 题目描述 Hanks 博士是 BT(Bio-Tec ...

  2. 「NOIP2009」Hankson的趣味题

    题目描述 (由于本题是数论题,所以我只把题目大意说一下...) 输入时给定\(a_0,a_1,b_0,b_1\),题目要求你求出满足如下条件的\(x\)的个数: \[\begin{cases}\gcd ...

  3. 【NOIP2009】Hankson 的趣味题

    题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲解 ...

  4. NOIP2009 T2 Hankson的趣味题

    传送门 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上, ...

  5. 【NOIP2009】Hankson的趣味题

    题意:给出 \(a_0\), \(a_1\), \(b_0\), \(b_1\), 求出正整数 \(x\) 的个数,\(x\) 满足: \(gcd(x,a_0)=a_1\) , \(lcm(x, b_ ...

  6. 洛谷P1072 [NOIP2009] Hankson 的趣味题

    P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...

  7. CH3201 Hankson的趣味题

    题意 3201 Hankson的趣味题 0x30「数学知识」例题 描述 Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson ...

  8. 一本通1626【例 2】Hankson 的趣味题

    1626:[例 2]Hankson 的趣味题 题目描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson 正在思考 ...

  9. 1626:【例 2】Hankson 的趣味题

    1626:[例 2]Hankson 的趣味题题解 [题目描述] Hanks 博士是 BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson ...

随机推荐

  1. 【AMAD】stackprint -- 为Python加入利于调试的traceback信息

    简介 动机 作用 用法 热度分析 源码分析 个人评分 简介 为Python加入利于调试的traceback信息.  动机 Python抛出异常时,会显示一些traceback信息.但是,一些时候这些 ...

  2. 判断给定的整数n能否表示成连续的m(m>1)个正整数之和

    #include<stdio.h> int main(){ //如果是奇数,肯定满足条件 int num; scanf("%d",&num); ==){ pri ...

  3. bochs 2.6.8 常用命令集合

    b addr 在物理地址处设置断点 addr为物理内存地址,不加段基址 lb 在线性地址处设置断点  addr为线性物理地址,不加基址 vb 在虚拟地址上设置断点 addr为段基址:偏移地址, cs段 ...

  4. [转帖]Linux查找文件6个高效工具

    Linux查找文件6个高效工具 https://www.linuxrumen.com/rmxx/176.html 需要实操 -inname -type 等等. 1. 前言 我们使用Linux过程中,经 ...

  5. 小菜鸟之Cisco

    Switch>enable// Switch#configure// Switch#show vlan//展示vlan接口 Switch(config)#enable password 1234 ...

  6. Hive怎么使用远程连接

    HIVE的连接模式== 本地连接模式 直接启动hive命令 HIVE的远程连接 这里要启动HIVE的服务 thirft进行编写 hiveserver2 —- > 前台启动 后台启动 前台启动 h ...

  7. 从入门到自闭之Python自定义模块

    自定义模块 定义:一个文件就是一个模块(能被调用的文件,模块就是一个工具箱,工具就是函数) 作用: 将代码文家化管理,提高可读性,避免重复代码 拿来就用(避免重复造轮子),python中类库比较多,提 ...

  8. HTML5自学

    1.1   标题文本 在HTML5中,文本的结构除了以行和段落出现之外,还可以作为标题存在,通常一篇文档最基本的结构就是由不同级别的标题和正文组成的. 例如1:(中国门户网站) https://www ...

  9. Codeforces 1196D2. RGB Substring (hard version)

    传送门 考虑枚举每一个位置作为可能子段的起点,然后对以这个位置为起点的所有情况下的答案取 $min$ 当固定了起点 $i$ 并且固定了起点 $i$ 最终的字符时,答案也固定了 发现对于所有与 $i \ ...

  10. 数据结构(三) 树和二叉树,以及Huffman树

    三.树和二叉树 1.树 2.二叉树 3.遍历二叉树和线索二叉树 4.赫夫曼树及应用 树和二叉树 树状结构是一种常用的非线性结构,元素之间有分支和层次关系,除了树根元素无前驱外,其它元素都有唯一前驱. ...