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

\(gcd(x,a_0)=a_1\) , \(lcm(x, b_0)=b_1\) 。

题解:预备知识:设 \(a= {p_1}^{a_1}{p_2}^{{a_2}}{p_3}^{{a_3}}...{p_n}^{{a_n}}\),\(b= {p_1}^{b_1}{p_2}^{{b_2}}{p_3}^{{a_3}}...{p_n}^{{b_n}}\) ,则有:

\(gcd(a,b)={p_1}^{min(a_1,b_1)}{p_2}^{min(a_2,b_2)}{p_3}^{min(a_3,b_3)}...{p_n}^{min(a_n,b_n)}\)

\(lcm(a,b)={p_1}^{max(a_1,b_1)}{p_2}^{max(a_2,b_2)}{p_3}^{max(a_3,b_3)}...{p_n}^{max(a_n,b_n)}\)

根据题目结合上面的性质可以得到如下做法:

考虑枚举质因数 \({p_x}\) ,设 \(a_0\) 的质因数中 \(p_x\) 的系数为 \(t_1\) ,\(a_1\) 的系数为 \(t_2\) , \(x\) 的系数为 \(t\) ,由前面性质可得:\(min(t, t_1)=t_2\) 。分情况讨论:如果 \(t_1 < t_2\) ,那么无解;如果 \(t_1=t_2\) , 那么 \(t\) 要满足 \(t \geq t_2\) ;如果 \(t_1 \gt t_2\) ,那么 \(t = t_2\) .

同理,设 \(b_0\) 的质因数中 \(p_x\) 的系数为 \(t_3\) ,\(a_1\) 的系数为 \(t_4\) , \(x\) 的系数为 \(t\) ,由前面性质可得:\(max(t, t_3)=t_4\) 。分情况讨论:如果 \(t_3 \gt t_4\) ,那么无解;如果 \(t_3=t_4\) , 那么 \(t\) 要满足 \(t \leq t_4\) ;如果 \(t_3 \lt t_4\) ,那么 \(t = t_4\) .

把上面两个合并分类讨论可得:当 \(t_2=t_1\) 且 \(t_4=t_3\) 且 \(t_4 \ge t_2\) ,此时 \(t_2 \le t \le t_4\) , \(ans\) *= \(t_4-t_2+1\) .

下面是无解的 \(3\) 种情况(可简化):

  1. \(t_2=t_1\) 且 \(t_4=t_3\) 且 \(t_4 \lt t_2\),无解
  2. \(t_2 \lt t_1\) 或 \(t_4 \gt t_3\) ,无解
  3. \(t_2 \gt t_1\) 且 \(t_4 \lt t_3\) 且 $ t_2 ≠ t_4$,无解

其他情况对 \(ans\) 无影响 ( \(ans\) *= \(1\) ).

枚举质因数范围为 \(\sqrt{b_1}\) (仅枚举 \(b_1\) 的质因数),故总时间复杂度约为 $ O(n\sqrt{b_1})$ ,可以通过。

#include<cstdio>
inline int _read()
{
int x=0; char c;
for(;c<'0'||c>'9';c=getchar());
for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+c-'0';
return x;
}
const int N=100000;
bool b[N];
int prime[N],tot,a0,a1,b0,b1,ans;
void GetPrime()
{
for(int i=2;i<=50000;i++)
if(!b[i])
{
prime[++tot]=i;
for(long long j=1ll*i*i;j<=50000;j+=i) b[j]=true;
}
}
void work(int p)
{
int t1=0,t2=0,t3=0,t4=0;
for(;a0%p==0;a0/=p)t1++;//求次数
for(;a1%p==0;a1/=p)t2++;
for(;b0%p==0;b0/=p)t3++;
for(;b1%p==0;b1/=p)t4++;
if(t1==t2&&t3==t4)
{
if(t1<=t3) ans*=(t3-t1+1);
else ans=0; //ans=0即无解
}
if(t1<t2||t3>t4) ans=0;
if(t1>t2&&t3<t4&&t2!=t4) ans=0;
}
int main()
{
int T=_read();
GetPrime(); //预处理质数
while(T--)
{
ans=1;
a0=_read(),a1=_read(),b0=_read(),b1=_read();
for(int i=1;i<=tot;i++)
if(b1%prime[i]==0) work(prime[i]);
//枚举b1的质因数
if(b1>1) work(b1);
printf("%d\n",ans);
}
}

【NOIP2009】Hankson的趣味题的更多相关文章

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

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

  2. NOIP2009 Hankson 的趣味题 : 数论

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

  3. NOIP2009 Hankson的趣味题

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

  4. [NOIP2009] $Hankson$ 的趣味题 (数论,gcd)

    题目链接 Solution 此题,用到的结论都是比较浅显的,但是,我竟然没想到反过来枚举... 只有50分... 被自己蠢哭... 结论比较浅显: 1.对于两个正整数\(a\),\(b\),设 \(g ...

  5. [NOIp2009] $Hankson$ 的趣味题

    类型:数论 传送门:>Here< 题意:给出四个数$a_0,a_1,b_0,b_1$,求满足$gcd(x,a_0)=a_1,lcm(x,b_0)=b_1$的$x$的个数 解题思路 显然$a ...

  6. luogu1072 [NOIp2009]Hankson的趣味题 (数学+STL::set)

    一个JSB做法 由$\frac{x*b0}{gcd(x,b0)}=b1$,可得$\frac{x}{gcd(x,b0)}=\frac{b1}{b0}$ 设$b2=\frac{b1}{b0}$ 所以对$b ...

  7. NOIP 2009 Hankson 的趣味题

    洛谷 P1072 Hankson 的趣味题 洛谷传送门 JDOJ 1648: [NOIP2009]Hankson的趣味题 T2 JDOJ传送门 Description Hanks 博士是BT (Bio ...

  8. 「NOIP2009」Hankson 的趣味题

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

  9. CH3201 Hankson的趣味题

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

  10. 算法训练 Hankson的趣味题

    算法训练 Hankson的趣味题   时间限制:1.0s   内存限制:64.0MB        问题描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Han ...

随机推荐

  1. TCP/IP,三次握手四次挥手,TCP/UDP , HTTP/HTTPS

    internet:通用名词,由多个计算机网络组成的网络,网络间的通信协议是任意的 Internet:专用名词,当前全球最大的开放计算机网络,采用TCP/IP协议族作为通信的规则.www万维网是广泛应用 ...

  2. Eclipse - 常见问题 - Refresh

    有时候项目代码正确但运行后出现异常,是因为eclipse没有刷新 (如jar包添加了但没用),比较脑慢. 解决方法: clean缓存,或者要多点几次Refresh,或者重启 eclipse.

  3. IDEA激活方法(Linux和Windows通用)

    一.前言 idea是一款十分智能的编程软件,有能力的同志们还是尽量支持正版. 二.激活流程 话不多说,开始教程 2.1 下载激活工具包 链接:https://pan.baidu.com/s/1nj3w ...

  4. C++ 11 :override 关键字的使用

    override 关键字 作用:在成员函数声明或定义中, override 确保该函数为虚函数并覆写来自基类的虚函数. 位置:函数调用运算符之后,函数体或纯虚函数标识 "= 0" ...

  5. jenkins -- 安装、任务构建

    一.jenkins是什么? Jenkins是一个开源的.提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续.自动的构建/测试软件项目.监控外部任务的运行( ...

  6. P1080 MOOC期终成绩

    1080 MOOC期终成绩 (25分)   对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分 ...

  7. JavaScript深入理解对象方法——Object.entries()

    Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性) 示例 ...

  8. bzoj 1138: [POI2009]Baj 最短回文路

    额,,貌似网上的题解都说超时之类的. 然而我这个辣鸡在做的时候不知道在想什么,连超时的都不会. 超时的大概是这样的,f[x][y]表示x到y的最短回文路,然后更新的话就是 f[x][y]更新到 f[a ...

  9. markdown超链接怎么写?

    效果:我的微博 #上面的效果就是下面这种写法: [ 我的微博 ]( http://weibo.com/5833683560/profile?topnav=1&wvr=6&is_all= ...

  10. spring#事件发布订阅

    1. 如果在应用中发生了某些事件,事件会被拦截和处理就好了,这样就有了很大的灵活性,至少代码不会紧密的耦合在一起, 代码的解耦就是业务的解耦,业务A的代码不用手动的调用业务B的代码,业务B只需要监听相 ...