/*
可以得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);
}
}

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

最新文章

  1. Qt Undo Framework Demo
  2. opencv在ios上的开发教程
  3. JavaScript中{}+{}
  4. CXF学习(3) wsdl文件
  5. 【freemaker】之判断是否为空,表达式的使用
  6. ES5基础01:正则表达式
  7. 如何在windows上搭建ftp服务器
  8. linux实现nginx按照日期存储日志
  9. TabControl控件的美化
  10. springmvc 传递和接收数组参数
  11. Delphi中TFlowPanel实现滚动条效果
  12. EF 批量 循环删除
  13. 使用Yeoman generator来规范工程的初始化
  14. npm介绍与cnpm介绍
  15. 适合精致女孩使用的APP软件 不容错过的精彩人生
  16. sql的sp存储过程详解
  17. flask-appbuilder 快速入门
  18. HDU 1728 逃离迷宫 BFS题
  19. 【BZOJ】1047: [HAOI2007]理想的正方形(单调队列/~二维rmq+树状数组套树状数组)
  20. Linux之Shell 脚本加密工具-shc

热门文章

  1. switchyomega插件的基本使用
  2. .net视频教程代码之《提交注册内容》
  3. python---ORM之SQLAlchemy(2)外键使用
  4. 加减乘除工具类BigDecimalUtil
  5. Shell结合Expect实现自动输入密码
  6. luogu P1600 天天爱跑步
  7. luogu P1437 [HNOI2004]尻♂砖块
  8. TypeError: view must be a callable or a list/tuple in the case of include()
  9. SpringBoot常用Starter介绍和整合模板引擎Freemaker、thymeleaf 4节课
  10. URLSession