题意

3201 Hankson的趣味题 0x30「数学知识」例题

描述

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

今天在课堂上,老师讲解了如何求两个正整数c1和c2的最大公约数和最小公倍数。现在Hankson认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数a0,a1,b0,b1,设某未知正整数x满足:

1、  x和a0的最大公约数是a1;

2、  x和b0的最小公倍数是b1。

Hankson的“逆问题”就是求出满足条件的正整数x。但稍加思索之后,他发现这样的x并不唯一,甚至可能不存在。因此他转而开始考虑如何求解满足条件的x的个数。请你帮助他编程求解这个问题。

输入格式

输入第一行为一个正整数n,表示有n组输入数据。接下来的n行每行一组输入数据,为四个正整数a0,a1,b0,b1,每两个整数之间用一个空格隔开。输入数据保证a0能被a1整除,b1能被b0整除。

输出格式

输出共n行。每组输入数据的输出结果占一行,为一个整数。

对于每组数据:若不存在这样的x,请输出0;

若存在这样的x,请输出满足条件的x的个数;

样例输入

2
41 1 96 288
95 1 37 1776

样例输出

6
2

数据范围与约定

对于 50%的数据,保证有1≤a0,a1,b0,b1≤10000 且n≤100。 

对于 100%的数据,保证有1≤a0,a1,b0,b1≤2,000,000,000 且n≤2000。

样例解释

第一组输入数据, x x 可以是 9,18,36,72,144,2889,18,36,72,144,288 ,共有 66 个。

第二组输入数据, xx 可以是 48,177648,1776 ,共有 22 个。

来源

CCF NOIP2009

分析

预处理出\(\sqrt{2\times 10^9}\)以内的质数,对每个质因数分类讨论即可。

时间复杂度\(O(n \sqrt{d}/\log d)\)

代码

#include<bits/stdc++.h>
#define rg register
#define il inline
#define co const
template<class T>il T read(){
    rg T data=0,w=1;
    rg char ch=getchar();
    while(!isdigit(ch)){
        if(ch=='-') w=-1;
        ch=getchar();
    }
    while(isdigit(ch))
        data=data*10+ch-'0',ch=getchar();
    return data*w;
}
template<class T>il T read(rg T&x){
    return x=read<T>();
}
typedef long long ll;

co int N=1e5+6,INF=0x3f3f3f3f;
int p[N];
bool v[N];
int main(){
//  freopen(".in","r",stdin);
//  freopen(".out","w",stdout);
    v[1]=1;
    int tot=0;
    for(int i=2;i<=5e4;++i){
        if(!v[i]) p[++tot]=i;
        for(int j=1,k;j<=tot;++j){
            k=i*p[j];
            if(k>5e4) break;
            v[k]=1;
            if(i%p[j]==0) break;
        }
    }
    int n=read<int>();
    while(n--){
        int a0,a1,b0,b1;
        read(a0),read(a1),read(b0),read(b1);
        if(a1>a0||b1<b0){
            puts("0");
            continue;
        }
        int ans=1;
        bool flag=1;
        for(int i=1;i<=tot;++i){
            if(a0==1&&a1==1&&b0==1&&b1==1) break;
            int ta0=0,tb0=0,ta1=0,tb1=0;
            int la=0,lb=0,l=0;
            int ra=INF,rb=INF,r=INF;
            while(a0%p[i]==0){
                a0/=p[i];
                ta0++;
            }while(b0%p[i]==0){
                b0/=p[i];
                tb0++;
            }
            while(a1%p[i]==0){
                a1/=p[i];
                ta1++;
            }
            while(b1%p[i]==0){
                b1/=p[i];
                tb1++;
            }
            if(ta0<ta1||tb0>tb1){
                flag=0;
                break;
            }
            la=ta1,rb=tb1;
            if(ta0>ta1) ra=ta1;
            if(tb0<tb1) lb=tb1;
            l=std::max(la,lb);
            r=std::min(ra,rb);
            if(r<l){
                flag=0;
                break;
            }
            ans*=(r-l+1);
        }
        if(!(a0==1&&a1==1&&b0==1&&b1==1)){
            if(a1>a0||b1<b0) flag=0;
            if(a1==a0&&a1!=1) ans<<=1;
            if(b1==b0&&b1!=1) ans<<=1;
        }
        if(!flag) ans=0;
        printf("%d\n",ans);
    }
    return 0;
}

CH3201 Hankson的趣味题的更多相关文章

  1. 算法训练 Hankson的趣味题

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

  2. 1172 Hankson 的趣味题[数论]

    1172 Hankson 的趣味题 2009年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Descrip ...

  3. 1172 Hankson 的趣味题

    1172 Hankson 的趣味题 2009年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Descrip ...

  4. Codevs 1172 Hankson 的趣味题 2009年NOIP全国联赛提高组

    1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Hanks 博 ...

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

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

  6. 洛谷 P1072 Hankson 的趣味题 解题报告

    P1072 \(Hankson\)的趣味题 题目大意:已知有\(n\)组\(a0,a1,b0,b1\),求满足\((x,a0)=a1\),\([x,b0]=b1\)的\(x\)的个数. 数据范围:\( ...

  7. luogu P1072 Hankson的趣味题

    题目链接 luogu P1072 Hankson 的趣味题 题解 啊,还是noip的题好做 额,直接推式子就好了 \(gcd(x,a_0)=a_1=gcd(\frac{x}{a_1},\frac{a_ ...

  8. 洛谷P1072 Hankson 的趣味题

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

  9. NOIP 2009 Hankson 的趣味题

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

随机推荐

  1. VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)

    前面两节讲了比较常用的按钮控件,并通过按钮控件实例说明了具体用法.本文要讲的是列表框控件(ListBox)及其使用实例. 列表框控件简介 列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选 ...

  2. 反射获取成员方法(Method)

    1.1.1 反射公开的非静态的成员方法 Method getDeclaredMethod(String name,Class ... parameterTypes)获取某个方法. 说明: 1)在Cla ...

  3. HDU1160FatMouse's Speed

    #include<stdio.h> #include<string.h> #include<algorithm> #include<set> #incl ...

  4. dependencyManagement、parent与dependencies

    本文总结自:https://www.cnblogs.com/feibazhf/p/7886617.html 当我们的项目很多时,为了适应子项目的依赖项使用统一的版本,我们可以创建一个parent项目来 ...

  5. ENC28J60

    8 KB发送接收数据包双端口 SRAM

  6. Tomcat 发布项目 conf/Catalina/localhost 配置 及数据源配置

    本文介绍通过在tomcat的conf/Catalina/localhost目录下添加配置文件,来发布项目.因为这样对 tomcat 的入侵性最小,只需要新增一个配置文件,不需要修改原有配置:而且支持动 ...

  7. MariaDB主从复制搭建

    我的github 安装MySQL服务器 安装数据库 yum install -y mariadb-server 初始化数据库 mysql_secure_installation #MySql初始化脚本 ...

  8. A TLS packet with unexpected length was received 解决方法

    参考:A TLS packet with unexpected length was received. 系统环境 主系统 OS X,虚拟机 Ubuntu 14.04 64bit. 问题描述 在git ...

  9. Python学习札记(二十四) 函数式编程5 返回函数

    参考:返回函数 NOTE 1.高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. eg.求和函数 #!/usr/bin/env python3 def calsums(*args): a ...

  10. BZOJ 3876 【AHOI2014】 支线剧情

    题目链接:支线剧情 这道题就是一道裸裸的上下界网络流……只不过这道题边带了权,那么建出图之后跑费用流即可. 首先需要新建超级源\(S\)和超级汇\(T\).对于这道题,对于一条边\((u,v,z)\) ...