1626:【例 2】Hankson 的趣味题

题目描述

  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 的个数。请你帮助他编程求解这个问题。

输入格式

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

输出格式

  输出文件 son.out 共n 行。每组输入数据的输出结果占一行,为一个整数。对于每组数据:若不存在这样的 x,请输出0;若存在这样的 x,请输出满足条件的x 的个数;

样例数据 1

输入

2
41 1 96 288
95 1 37 1776

输出

6
2

「说明」第一组输入数据,x 可以是9、18、36、72、144、288,共有6 个。第二组输入数据,x 可以是48、1776,共有2 个。

备注

「数据范围」
对于 50%的数据,保证有1≤a0,a1,b0,b1≤10000 且n≤100。
对于 100%的数据,保证有1≤a0,a1,b0,b1≤2,000,000,000 且n≤2000。

sol:有一种能得90pts的优秀暴力,i 从1~sqrt(n)枚举,判断 i 和 b1/i 是否可行 (非常好打)

/*
原式 b0*x/gcd(b0,x) = b1
-->b0*x = gcd(b0,x)*b1
-->b0*x/b1 = gcd(b0,x)
-->gcd(b0,x) = b0*x/b1
-->gcd(b1/x,b1/b0) = 1
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
ll a0,a1,b0,b1;
inline ll gcd(ll x,ll y)
{
return (!y)?(x):(gcd(y,x%y));
}
inline int Solve(int x)
{
return ((gcd(a0,x)==a1)&&gcd(b1/x,b1/b0)==)?:;
}
int main()
{
int i,T;
R(T);
while(T--)
{
R(a0); R(a1); R(b0); R(b1);
int ans=;
for(i=;i<=sqrt(b1);i++) if(b1%i==)
{
ans=ans+Solve(i);
if(i*i!=b1) ans+=Solve(b1/i);
}
Wl(ans);
}
return ;
}
/*
input
2
41 1 96 288
95 1 37 1776
output
6
2
*/

暴力

正解是这样的,暴力枚举b1的质因数:对于一个质因数 k

对于 a0中若有 kc0,a1中有kc1:那么因为gcd(a0,x)=a1,所以c0必须不小于c1,否则无解,如果c0=c1,那么x中k的系数可以是任意一个大于等于c0的数,反正gcd后还是kc0,如果c0>c1,那么x中k的系数必须是c1

对于b0中若有 kc2,b1中有kc3:那么因为lcm(b0,x)=b1,所以c2必须不大于c3,否则无解,如果c2=c3,那么x中k的系数可以是任意一个小于等于c3的数,反正lca后还是kc3,如果c2<c3,那么x中k的系数必须是c3

Ps:想清楚后代码也很简单(关键是要想明白)

/*
原式 b0*x/gcd(b0,x) = b1
-->b0*x = gcd(b0,x)*b1
-->b0*x/b1 = gcd(b0,x)
-->gcd(b0,x) = b0*x/b1
-->gcd(b1/x,b1/b0) = 1 gcd(x,a0)==a1
lcm(x,b0)==b1
//b1一定是x的整倍数,而x一定是a1的整倍数
*/
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
int a0,a1,b0,b1,ans;
bool Bo[N];
int Prim[N];
inline void Pre_Prime()
{
int i,j;
for(i=;i<=;i++)
{
if(!Bo[i]) Prim[++*Prim]=i;
for(j=;j<=*Prim&&Prim[j]*i<=;j++)
{
Bo[Prim[j]*i]=;
if(i%Prim[j]==) break;
}
}
return;
}
inline void Solve(int x)
{
int c0=,c1=,c2=,c3=;
while(a0%x==){a0/=x; c0++;}
while(a1%x==){a1/=x; c1++;}
while(b0%x==){b0/=x; c2++;}
while(b1%x==){b1/=x; c3++;}
if(c0<c1||c2>c3)
{
ans=;
return;
}
if(c0==c1&&c2==c3)
{
if(c1<=c3) ans*=c3-c1+;
else ans=;
}
else if(c0>c1&&c2<c3&&c1!=c3)
{
ans=;
}
return;
}
int main()
{
// freopen("son9.in","r",stdin);
// freopen("my.out","w",stdout);
int i,T;
Pre_Prime();
R(T);
while(T--)
{
R(a0); R(a1); R(b0); R(b1);
ans=;
for(i=;i<=*Prim&&Prim[i]<b1&&ans;i++)
{
Solve(Prim[i]);
}
if(b1>) Solve(b1);
Wl(ans);
}
return ;
}
/*
input
2
41 1 96 288
95 1 37 1776
output
6
2 input
2
10 10 10 10
5 1 2 10
output
1
0
*/

一本通1626【例 2】Hankson 的趣味题的更多相关文章

  1. 1626:【例 2】Hankson 的趣味题

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

  2. 算法训练 Hankson的趣味题

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

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

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

  4. 1172 Hankson 的趣味题

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

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

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

  6. CH3201 Hankson的趣味题

    题意 3201 Hankson的趣味题 0x30「数学知识」例题 描述 Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson ...

  7. 洛谷P1072 Hankson 的趣味题

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

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

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

  9. 「NOIP2009」Hankson 的趣味题

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

随机推荐

  1. Android 将拼接好并加上边框的图片保存到内存卡中

    通过前两篇文章,问们学会了怎样拼接图片.给拼接好的图片加上边框样式,但这还不够,忙活了大半天 终于拼接好并给图片美化了,但是程序一旦推出,之前做的工作都白费了.这时我们会想,能不能把拼接好的图片保存起 ...

  2. (三)Lua脚本语言入门(数组)

    又要找工作了,变的忧虑了,唯有学习才让内心变得踏实,今天玩了一下午的王者荣耀,正事都忘了...... 如果认为所谓的毅力是每分每秒的“艰苦忍耐”式的奋斗,那这是一种很不足的心理状态.毅力是一种习惯,毅 ...

  3. Theano3.7-练习之堆叠消噪自动编码器

    来自:http://deeplearning.net/tutorial/SdA.html#sda Stacked Denoising Autoencoders (SdA) note:这部分需要读者读过 ...

  4. day34

    今日内容: 1.开启子进程的两种方式 2.join方法 3.进程之间内存空间相互隔离 4.僵尸进程和孤儿进程 5.守护进程 6.互斥锁 7.进程对象其他相关的属性和方法 1.开启子进程的两种方式 方式 ...

  5. MVC的BundleConfig应用

    1.MVC可以通过BundleConfig类来配置css和js的统一引用,分别通过StyleBundle和ScriptBundle来创建. 2.可以在母版页中统一加载设置在BundleConfig.c ...

  6. 多模匹配算法之Aho-Corasick

    除剔除那些含有敏感词的文本,由于有大量的敏感词,所以通过简单的正则表达式和字符串查找的方式效率太低,每次都有遍历一次字符串.而AC算法的核心思想就是避免不必要的回溯使搜索一直沿着向前的方向,最大可能的 ...

  7. webSphere-Eclipse中配置was的远程调试

    目前我们项目中使用的应用服务器多是WebSphere,一直苦于无法进行调试,今天在网上看到一篇,原文是 http://www.cnblogs.com/newstar/archive/2010/04/1 ...

  8. Android应用安全之WEB接口安全

    Android应用安全不仅包括客户端的安全,也包括web接口的安全.移动App中的Web接口安全主要分为以下几块: 1.SQL注入漏洞 这是一个不能再常见的漏洞类型了,由于App的特性,开发人员认为使 ...

  9. 20155311《网络对抗》MSF基础应用

    20155311<网络对抗>MSF基础应用 实验过程 实验系统 靶机1:Windows XP Professional SP2 ,IP地址:192.168.136.129 靶机2:Wind ...

  10. WPF编程,C#中对话框自动关闭的一种方法。

    原文:WPF编程,C#中对话框自动关闭的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/8 ...