【z12】&&【b092】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 的个数。请你帮
助他编程求解这个问题。
格式
输入格式
第一行为一个正整数 n,表示有 n 组输入数据。接下来的 n 行每
行一组输入数据,为四个正整数 a0,a1,b0,b1,每两个整数之间用一个空格隔开。输入
数据保证 a0能被 a1 整除,b1 能被 b0整除。
输出格式
共n 行。每组输入数据的输出结果占一行,为一个整数。
对于每组数据:若不存在这样的 x,请输出 0;
若存在这样的 x,请输出满足条件的 x 的个数;
样例1
样例输入1[复制]
2
41 1 96 288
95 1 37 1776
样例输出1[复制]
6
2
限制
每个测试点1s
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=z12
【题解】
题目的要求是
gcd(x,a0)==a1;···①
lcm(x,b0)==b1;···②
则根据最大公约数gcd和lcm的关系->q*w/gcd(q,w) == lcm(q,w);
由①②可得
gcd(x,a0)==a1;
gcd(x,b0) == x*b0/b1
进一步两边同时除右边那个东西
gcd(x/a1,a0/a1)==1; ···③
gcd(b1/b0,b1/x)==1; ···④
而题目限制了a1能整除a0,b0能整除b1;
而a1<=b1(因为要求x和a0的最大公因数为a1则x>=a1,又x和b0的最小公倍数为a1,所以x<=b1->则a1<=b1);
所以只要枚举b1的因子x就好;(因为b1/x要为整数);
然后再看看a1能不能整除x(因为x/a1也要为整数);
最后再判断③和④是不是成立的;
写个gcd就好;
b1的因子的话只要i从1->sqrt(b1)枚举就好;
然后i是b1的因子的话b1/i也是b1的因子(对称的);
(要注意x*x的情况,不然会多算);
数的因子其实没想象的那么多(我记得1e8才100多个的样子);
所以最后虽然又乘了1000;
也只是相当于for (i= 1 ->8e7左右);
外层判断一下i是不是b1的因子;
但是(进入)for里面做的事情很少;(因子少);
复杂度也很可观吧.
【完整代码】
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int a0,a1,b0,b1,n;
int main()
{
// freopen("F:\\rush.txt","r",stdin);
scanf("%d",&n);
for (int i = 1;i <= n;i++)
{
int num = 0;
scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
int len = int(sqrt(double(b1)));
for (int i = 1; i<= len;i++)
if ((b1%i)==0)
{
int x = i;
if ((x%a1)==0)
if (__gcd(x/a1,a0/a1)==1 && __gcd(b1/b0,b1/x)==1)
num++;
x = b1 / x;
if (x!= i && (x%a1)==0)
if (__gcd(x/a1,a0/a1)==1 && __gcd(b1/b0,b1/x)==1)
num++;
}
printf("%d\n",num);
}
return 0;
}
【z12】&&【b092】hankson的趣味问题的更多相关文章
- 算法训练 Hankson的趣味题
算法训练 Hankson的趣味题 时间限制:1.0s 内存限制:64.0MB 问题描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Han ...
- 1172 Hankson 的趣味题[数论]
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Descrip ...
- 1172 Hankson 的趣味题
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Descrip ...
- Codevs 1172 Hankson 的趣味题 2009年NOIP全国联赛提高组
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Hanks 博 ...
- 一本通1626【例 2】Hankson 的趣味题
1626:[例 2]Hankson 的趣味题 题目描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson 正在思考 ...
- 洛谷 P1072 Hankson 的趣味题 解题报告
P1072 \(Hankson\)的趣味题 题目大意:已知有\(n\)组\(a0,a1,b0,b1\),求满足\((x,a0)=a1\),\([x,b0]=b1\)的\(x\)的个数. 数据范围:\( ...
- CH3201 Hankson的趣味题
题意 3201 Hankson的趣味题 0x30「数学知识」例题 描述 Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson ...
- luogu P1072 Hankson的趣味题
题目链接 luogu P1072 Hankson 的趣味题 题解 啊,还是noip的题好做 额,直接推式子就好了 \(gcd(x,a_0)=a_1=gcd(\frac{x}{a_1},\frac{a_ ...
- 洛谷P1072 Hankson 的趣味题
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...
- NOIP 2009 Hankson 的趣味题
洛谷 P1072 Hankson 的趣味题 洛谷传送门 JDOJ 1648: [NOIP2009]Hankson的趣味题 T2 JDOJ传送门 Description Hanks 博士是BT (Bio ...
随机推荐
- javascript进阶教程第一章案例实战
javascript进阶教程第一章案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过练习积累JS的使用技巧 二.实例 练习1:删除确认提示框 实例描述: 防止用户小心单击了“删除”按钮,在用 ...
- 60.浅谈nodejs中的Crypto模块
转自:https://www.cnblogs.com/c-and-unity/articles/4552059.html node.js的crypto在0.8版本并没有改版多少,这个模块的主要功能是加 ...
- storm排错
1.运行错误如下 Exception in thread "main" java.lang.RuntimeException: org.apache.thrift7.transpo ...
- python 内存中写入文件(read读取不到文件解决)
from io import StringIO a = StringIO.StringIO('title') a.write('content1\n') a.write('content2') a.s ...
- cocos2d-x-lua基础系列教程六(lua-table增删改查)
lua-table库 1.插入 table.insert () --假设没有设定位置.默认last位置 样例: myTable = { 1, 2, 3 } myTable.insert(myTable ...
- C# XML类学习整理(待补)
一.读取xml文件内容: #region "获取xml文件内容" //将xml文件加载进来 XDocument xdoc = XDocument.Load("F:\\6. ...
- 缩放文本框ExpandTextView
效果图: 代码: import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import ...
- [leetcode] Palindrome Number(不使用额外空间)
本来推断回文串是一件非常easy的事情,仅仅须要反转字符串后在与原字符串相比較就可以.这道题目明白说明不能使用额外的空间.那么使用将其分解连接成字符串的方法便不是可行的.仅仅好採用数学的方式: 每次取 ...
- Appium_python3 抓取客户端toast
在客户端登录或者退出登录的时候会有吐司提示,因此需要抓取来验证用户登录成功或者注销成功: 在获取toast之前需要添加 desired_caps['automationName'] = 'Uiau ...
- ecshop微信接口基础认识
ecshop微信接口基础认识,当你要学习ecshop和微信整合的时候,你就必须研究ecshop的数据结构对接以及微信数据接口的基本知识.我们知道微信其实就是通过有效的消息推送,用JSON格式的数据或者 ...