题目描述

(由于本题是数论题,所以我只把题目大意说一下。。。)

输入时给定\(a_0,a_1,b_0,b_1\),题目要求你求出满足如下条件的\(x\)的个数:

\[\begin{cases}\gcd(a_0,x)=a_1 \cdots\cdots 1 \\
\operatorname{lcm}(b_0,x)=b_1 \cdots\cdots2\end{cases}\]


基本思路

先上一波推导:

我们很容易可以得到:

\[\gcd(a \times d,b \times d)=d \times \gcd(a,b)
\]

所以根据这个规律以及\(\gcd\)的定义,由\(1\)式可知:

\[\gcd(a_0/a_1,x/a_1)=1 \cdots\cdots 3
\]

根据\(\operatorname{lcm}\)的定义:

\[\operatorname{lcm}(a,b)=a \times b/\gcd(a,b)
\]

\[\gcd(a,b)=a \times b/\operatorname{lcm}(a,b)
\]

所以由\(2\)式可得:

\[\gcd(b_0,x)=b_0 \times x/b_1
\]

进行类似于对\(1\)式的变换:

\[\gcd(b_1/x,b_1/b_0)=1 \cdots\cdots4
\]

联立\(3\)式和\(4\)式:

\[\begin{cases}\gcd(a_0/a_1,x/a_1)=1\\
\gcd(b_1/x,b_1/b_0)=1\end{cases} \cdots\cdots5\]

还可以观察到:

\[\begin{cases}a_1|x\\x|b_1\end{cases} \cdots\cdots6
\]

所以我们便得到了一种方法:\(O(\sqrt{N})\)扫一遍\(b_1\)的约数判断是否满足\(5\)式和\(6\)式,统计答案


细节注意事项

在扫描\(b_1\)的约数时,会得到两个约数:\(x\)和\(b_1/x\)特别注意当\(x=b_1/x\)即\(x^2=b_1\)时合法的\(x\)只计算一次。


参考代码

#include<cstdio>
#define rg register
inline int gcd(int a,int b){return b?gcd(b,a%b):a;}
template <typename T> inline T read(){
T s=0;bool f=false;char c=getchar();
while(c<'0'||c>'9')f|=(c=='-'),c=getchar();
while(c>='0'&&c<='9')s=(s<<3)+(s<<1)+(c^48),c=getchar();
return (f)?(-s):(s);
}
int main(){
int T=read<int>();
while(T--){
int a0=read<int>(),a1=read<int>();
int b0=read<int>(),b1=read<int>();
int tmp1=a0/a1,tmp2=b1/b0,ans=0;
for(rg int x=1;x*x<=b1;x++)
if(b1%x==0){
int y=b1/x;
if(x%a1==0&&gcd(x/a1,tmp1)==1&&gcd(tmp2,b1/x)==1) ans++;
if(x==y) continue;
if(y%a1==0&&gcd(y/a1,tmp1)==1&&gcd(tmp2,b1/y)==1) ans++;
}
printf("%d\n",ans);
}
return 0;
}

完结撒花\(qwq\)

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

  1. 「NOIP2009」Hankson 的趣味题

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

  2. loj2589 「NOIP2009」Hankson 的趣味题

    对于质因数分解理解还不到位. 此题可知$lcm$是$x$的倍数,$x$是$lcm$的约数,只要在$lcm$的分解质因数里对每一个质因子讨论种数即可. 具体来说,对于$lcm$的一个质因子$p$,讨论$ ...

  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. Jmeter_选项_函数助手_RandomString的用法

    1.用处:测试账户注册可以通过随机生成数实现,而不需要Excel手动输入, 缺点:随机生成数可能会重复 优点:不需要使用CSV config 或者excel ,txt格式 2.举例:之前我们通过CSV ...

  2. 第八届极客大挑战 Re

    0x01.Writeup-RE-CM_2 题目: 解题思路: 1.这个是经过xor的,王老师提示说用xortool,于是放进kali,装好之后执行 xortool CM_2.exe -b, 0.out ...

  3. Centos610安装Jdk1.8

    1.下载JDK 下载:  https://pan.baidu.com/s/15TYsE_wfSb48pS4SpUQKHA 提取码:fsx6 2.上传安装包 上传到linux 并拷贝到/opt/jdk目 ...

  4. 「CF1051F」The Shortest Statement

    传送门 Luogu 解题思路 注意到 \(m - n \le 20\) ,所以这其实是一个树上问题,非树边至多只有21条,那么我们就可以暴力地对每一个非树边所连接的点求一次单源最短路,然后每次询问时, ...

  5. 排序算法之插入排序的python实现

    插入排序的工作原理如下: (1)从数组第一个元素开始(0下标),从该元素开始进行构建有序序列: (2)取出待排序列中第一个元素,然后从“有序”序列中,从后往前扫描: (3)如果该元素(有序序列)大于待 ...

  6. redis场景分析的很到位

    链接:http://www.zhihu.com/question/19829601/answer/88069207来源:知乎 1. MySql+Memcached架构的问题 实际MySQL是适合进行海 ...

  7. python中os.path.abspath与os.path.realpath 区别

    python中os.path.abspath与os.path.realpath 区别cd /homemkdir amkdir btouch a/1.txtln -s /home/a/1.txt /ho ...

  8. 为 git 设定 socks5 代理

    为 git 设定 socks5 代理 查看当前设定 git config --global -l 为 git 设定全局代理 git config --global http.proxy socks5h ...

  9. PTA的Python练习题(十三)

    第4章-8 求分数序列前N项和 a=eval(input()) b=2 c=1 d=0 count=0 for i in range(a): count+=b/c d=b b=b+c c=d prin ...

  10. 寒假pta二

    整除光棍 这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1.11.111.1111等.传说任何一个光棍都能被一个不以5结尾的奇数整除.比如,111111就可以被13整除. 现在 ...