题意

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. 13信号signal

    信号 传送给进程的事件通知,完成异步通信 信号的产生 1.程序错误:硬件异常,除数为0,等 2.外部事件:定时器事件,按键中断(ctrl+c)等 3.显示请求:调用 kill,  raise 等信号发 ...

  2. 2018 Multi-University Training Contest 7 Solution

    A - Age of Moyu 题意:给出一张图,从1走到n,如果相邻两次走的边的权值不同,花费+1, 否则花费相同,求最小花费 思路:用set记录有当前点的最小花费有多少种方案到达,然后最短路 #i ...

  3. Python3.x:定时任务实现方式

    Python3.x:定时任务实现方式 Python3.x下实现定时任务的方式有很多种方式. 一.循环sleep: 最简单的方式,在循环里放入要执行的任务,然后sleep一段时间再执行.缺点是,不容易控 ...

  4. HDU 4370 0 or 1(转化为最短路)题解

    思路:虽然是最短路专题里的,但也很难想到是最短路,如果能通过这些关系想到图论可能会有些思路.我们把X数组看做邻接矩阵,那么三个条件就转化为了:1.1的出度为1:2.n的入度为1:3.2~n-1的出度等 ...

  5. Django-ORM查询api

    models.py示例 class Book(models.Model): nid=models.AutoField(primary_key=True) title=models.CharField( ...

  6. 【Java----判断字符串是否乱码】

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class ChineseUtill { private ...

  7. trim()不兼容ie的问题及解决方法

    当输入 src.trim();时,ie浏览器不支持此属性和方法,解决方法: //ie兼容trim方法if(!String.prototype.trim) { String.prototype.trim ...

  8. POJ 1239 Increasing Sequences(经典的两次dp)

    http://poj.org/problem?id=1239 题意:给出一串序列,现在要添加逗号作为分隔符,使得序列是递增序列,然后让最后一个数尽量小,第一个数尽量大. 思路:先从头到尾进行一次dp, ...

  9. JAVA基础之复识一

    JAVA不单是一门计算机编程语言,而且还是一种基于WEB的全方位软件开发技术, java特定运行平台及关键特点 java开发工具包的安装,配置与应用 java语言的基本概念 java面向对象编程 ja ...

  10. 并发编程-synchronized关键字大总结

    0.synchronized 的特点: 可以保证代码的原子性和可见性. 1.synchronized 的性质: 可重入(可以避免死锁.单个线程可以重复拿到某个锁,锁的粒度是线程而不是调用).不可中断( ...