洛谷 P1072 Hankson 的趣味题

洛谷传送门

JDOJ 1648: [NOIP2009]Hankson的趣味题 T2

JDOJ传送门

Description

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

Input

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

Output

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

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

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

Sample Input

2 41 1 96 288 95 1 37 1776

Sample Output

6 2

HINT

【说明】

  第一组输入数据,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。

Source

NOIP2009提高组

题解:

  • 暴力可以试一下

第一次尝试看到前50分的数据范围,可以使用裸的暴力过50pts。

代码:

#include<cstdio>
#include<algorithm>
using namespace std;
int n,ans;
int a,a1,b,b1;
int gcd(int x,int y)
{
return y?gcd(y,x%y):x;
}
int lcm(int x,int y)
{
return (x*y)/gcd(x,y);
}
int main()
{
scanf("%d",&n);
while(n--)
{
ans=0;
scanf("%d%d%d%d",&a,&a1,&b,&b1);
for(int i=1;i<=max(a,b1);i++)
if(gcd(i,a)==a1 && lcm(i,b)==b1)
ans++;
printf("%d\n",ans);
}
return 0;
}
  • 暴力优化

后来发现自己真笨,这个暴力完全就可以优化,只需要一个小小的数学推演:第二个条件中\(lcm(i,b)=b_1\),那么我们发现满足条件的\(i\)一定是\(b_1\)的约数,那就好办了,把\(b_1\)的约数全都处理出来,在约数上跑暴力判断就行了。

至于约数筛选的相关知识,请参考如下博客:

约数相关知识

所以有以下代码:(要开long long,不开的话还不如裸的暴力别问我咋知道的)

预计60-70,实际100(??!!)

#include<cstdio>
#define ll long long
using namespace std;
ll n,ans;
ll a,b,c,d;
inline int gcd(int x,int y)
{
return y?gcd(y,x%y):x;
}
inline ll lcm(int x,int y)
{
return (ll)x*(ll)y/(ll)gcd(x,y);
}
int main()
{
scanf("%lld",&n);
while(n--)
{
ans=0;
scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
for(int i=1;i*i<=d;i++)
{
if(d%i==0)
{
if(gcd(a,i)==b && lcm(c,i)==d)
ans++;
if(i!=d/i)
{
if(gcd(d/i,a)==b && lcm(d/i,c)==d)
ans++;
}
}
}
printf("%d\n",ans);
}
return 0;
}

注:JDOJ的是数据加强版。用以上代码会TLE,加各种卡常优化都没有用。但是后来找到了问题:读入long long形的变量要比读入int形变量更慢(大约也就慢700毫秒??)所以改成用int存变量即可AC,实测360毫秒(加快读及O2)。

NOIP 2009 Hankson 的趣味题的更多相关文章

  1. [NOIp 2009]Hankson的趣味题

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

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

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

  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. 洛谷P1072 Hankson 的趣味题

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

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

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

  7. luogu P1072 Hankson的趣味题

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

  8. 洛谷 P1072 Hankson 的趣味题

    题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现 在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲 ...

  9. [NOIP2009] 提高组 洛谷P1072 Hankson 的趣味题

    题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现 在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲 ...

随机推荐

  1. Node.js和JavaScript的区别与联系

    虽然不能说它们一点关系也没有,但它们的确关系不大: 第一,JavaScript是一门编程语言(脚本语言),而Node.js是一个平台,可以简单理解为它是JavaScript的一种执行环境. 第二,Ja ...

  2. Python之爬虫-校花网

    Python之爬虫-校花网 #!/usr/bin/env python # -*- coding:utf-8 -*- import re import requests # 拿到校花网主页的内容 re ...

  3. Oracle索引知识学习笔记

    目录 一.Oracle索引简介 1.1 索引分类 1.2 索引数据结构 1.3 索引特性 1.4 索引使用注意要点 1.5.索引的缺点 1.6.索引失效 二.索引分类介绍 2.1.位图索引 1.2.函 ...

  4. Element-ui 下拉列表 全选 多选时 select全选 新增一个选择所有的选项

    项目里经常会用到,在一个多选下拉框里新增一个选择所有的选项,例如: <!DOCTYPE html> <html lang="en"> <head> ...

  5. hdu-5573 Binary Tree

    The Old Frog King lives on the root of an infinite tree. According to the law, each node should conn ...

  6. Visual Studio Code 小记

    1. 改变语言 如图: 2. 设置皮肤 如图: 3. Visual Studio Code关闭右侧预览功能 4. 关闭预览模式 5. VS Code 优秀的主题 a. Atom One Dark Th ...

  7. 异步IO/协程/数据库/队列/缓存(转)

    原文:Python之路,Day9 - 异步IO\数据库\队列\缓存 作者:金角大王Alex add by zhj: 文章很长 引子 到目前为止,我们已经学了网络并发编程的2个套路, 多进程,多线程,这 ...

  8. jetty9部署

    https://blog.51cto.com/5404542/1751702     Jetty 9部署web应用 Jetty相关的文章比较少,不过官方文档挺齐全的.做下记录也是好事. jetty9跟 ...

  9. Java编程基础——标识符和关键字

    Java编程基础——标识符和关键字 摘要:本文主要介绍标识符和关键字. 标识符 是什么 Java语言中,为各种变量.方法.类和包等起的名字,统统称之为Java标识符. 命名规则 ◆ 应以字母.下划线. ...

  10. php 使用fsockopen 发送http请求

    需求背景 在公司开发这么一个需求,每天三次定时催付待客服催付状态的订单,设定每天15.16.17点三次执行job任务来给一批订单打电话催付,需要三个时间点都把待客服催付的订单拨打一遍电话,根据数据组统 ...