/*
可以得a>=c,b<=d,枚举d的质因子p
那么a,b,c,d,x中包含的p个数是ma,mb,mc,md,mx
在gcd(a,x)=c中
ma<mc => 无解
ma=mc => mx>=mc
ma>mc => mx=mc
在lcm(b,x)=d中
mb<md => mx=md
mb=md => mx<=md
mb>md => 无解
那么
ma==mc且mb==md时,mc<=mx<=md
ma>mc时 mx=mc,mb<md时,mx=md
令cntp表示x包含质因子p的方案数
预处理质数,找出所有d的质因子p,计算cntp,如果d自己也是质数,那么计算一次cntd即可
复杂度O(nsqrt(d)/logd)
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a,b,c,d,x,ma,mb,mc,md,mx,tot,p[];
ll m,prime[],v[];
void init(int n){
memset(v,,sizeof v);
m=;
for(int i=;i<=n;i++){
if(v[i]==){
v[i]=i;
prime[++m]=i;
}
for(int j=;j<=m;j++){
if(prime[j]>v[i] || prime[j]>n/i) break;
v[i*prime[j]]=prime[j];
}
}
}
int divide(int n,int p){
int res=;
while(n%p==)res++,n/=p;
return res;
} int main(){
init(sqrt());//打表
int n;
scanf("%d",&n);
while(n--){
ll ans=,cnt,tot=,flag=;
scanf("%lld%lld%lld%lld",&a,&c,&b,&d);
int tmp=d;
for(int i=;i<=m;i++){//求出d的所有质因子
if(prime[i]>d) break;
if(d%prime[i]==) {
p[++tot]=prime[i];
while(d%prime[i]==) d/=prime[i];
}
}
if(d>)p[++tot]=d; d=tmp;
for(int i=;i<=tot;i++){
ma=divide(a,p[i]);
mb=divide(b,p[i]);
mc=divide(c,p[i]);
md=divide(d,p[i]);
if(ma<mc || mb>md)ans=;//不可能的情况
else if(ma==mc && mb==md){//两者都有多解
if(mc<=md) ans*=(md-mc+);
else ans=;
}
else if(ma==mc && mb<md){//只有一解,可能没有
if(mc>md) ans=;
}
else if(mb==md && ma>mc){
if(mc>md)ans=;
}
else if(mc!=md) ans=; if(ans==) break;
}
printf("%lld\n",ans);
}
}

这是进阶指南第一版的一道题,书上有个推论错了,,

洛谷p1072 gcd,质因数分解的更多相关文章

  1. 【题解】洛谷P1072 Hankson的趣味题 (gcd和lcm的应用)

    洛谷P1072:https://www.luogu.org/problemnew/show/P1072 思路 gcd(x,a0)=a1 lcm(x,b0)=b1→b0*x=b1*gcd(x,b0) ( ...

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

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

  3. 洛谷P2398 GCD SUM (数学)

    洛谷P2398 GCD SUM 题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入 ...

  4. 洛谷 - P1072 Hankson - 的趣味题 - 质因数分解

    https://www.luogu.org/problemnew/show/P1072 一开始看了一看居然还想放弃了的. 把 \(x,a_0,a_1,b_0,b_1\) 质因数分解. 例如 \(x=p ...

  5. 洛谷P1072 Hankson 的趣味题(题解)

    https://www.luogu.org/problemnew/show/P1072(题目传送) 数学的推理在编程的体现越来越明显了.(本人嘀咕) 首先,我们知道这两个等式: (a0,x)=a1,[ ...

  6. 洛谷P1072 Hankson 的趣味题

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

  7. 洛谷 P1890 gcd区间

    P1890 gcd区间 题目提供者 洛谷OnlineJudge 标签 数论(数学相关) 难度 普及/提高- 题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R] ...

  8. 洛谷P2568 GCD(线性筛法)

    题目链接:传送门 题目: 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 ...

  9. 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)

    P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...

随机推荐

  1. Django多域名配置之Django-hosts插件的使用

    使用场景: Django中有两个app,如果通过域名来访问,可以使用www.domain.com/a.www.domain.com/b来访问.这样就显得有点LowB了.如果我想通过a.domain.c ...

  2. 博文中标题的样式H1H2H3H4

    设置博文中标题的样式H1 设置博文中标题的样式H2 设置博文中标题的样式H3 设置博文中标题的样式H4 设置博文中标题的样式H5 设置博文中标题的样式H6

  3. jdbc url写法(集群)

    mysql集群,jdbc url写法:jdbc:mysql://[host:port],[host:port].../[database][?propertyName1][=propertyValue ...

  4. JUnit报错 java.lang.Exception:No tests found matching

    将 @RunWith(SpringRunner.class)@SpringBootTestpublic class BusinessTest { @Test public void getList() ...

  5. centos6.5环境下安装zk

    第一步:先下载安装包,解压. 第二步:进去根目录,创建data文件夹  mkdir  data 第三步:进去conf文件夹,修改  zoo_sample.cfg    的名字   mv zoo_sam ...

  6. Spring RMI (Spring 远程方法调用)【原】

    所需jar包...?    不纠结,一股脑儿全导! 源码地址:http://pan.baidu.com/s/1jG8eOmy 先放结构图如下,客户端和服务端都在一个项目中.也可以把服务端的xxx导成j ...

  7. Codeforces 526D Om Nom and Necklace (KMP)

    http://codeforces.com/problemset/problem/526/D 题意 给定一个串 T,对它的每一个前缀能否写成 A+B+A+B+...+B+A+B+A+B+...+B+A ...

  8. WebStrom直接启动VUE项目

    点Run即可启动

  9. Error: failed to execute 'C:\Keil\ARM\ARMCC'的解决办法

    在KEIL新建工程时,容易出现该问题,我查了一些资料,最终找到该问题解决方法: 第一步:在keil里的菜单栏依次选择Project->Manage->Components,Environm ...

  10. AES加解密算法

    直接粘代码,该类是基于微信公众号消息加密解密所提供的PHP DEMO改造而来,目前使用于彬彬大学APP接口token校验中. php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂.因此它被 ...