[NOIP2009] $Hankson$ 的趣味题 (数论,gcd)
题目链接
Solution
此题,用到的结论都是比较浅显的,但是,我竟然没想到反过来枚举...
只有50分... 被自己蠢哭...
结论比较浅显:
1.对于两个正整数\(a\),\(b\),设 \(gcd(a,b)=k\),则存在\(gcd(a/k,b/k)=1\).
也就是说 \(x=k_1*a_1\),\(a_0=k_2*a_1\),它们最大公约数为\(a_1\),那么要求 \(k_1\) 与 \(k_2\) 必须互质,否则它们的最大公约数会是 \(gcd(k_1,k_2)*a_1\).
2.对于两个正整数\(a\),\(b\),设\(lcm(a,b)=k\),则存在\(gcd(k/a,k/b)=1\).
比较浅显,可以由 \(a*b=gcd(a,b)*lcm(a,b)\) 推出来.
然后通过分析题意结论,便可以分析出 \(x\) 满足 \(x\) 是 \(b_1\) 的因子,并且满足是 \(a_1\) 的倍数.
所以我们直接 \(\sqrt{b_1}\) 枚举其因子,并且判断是否满足上述条件即可.
### Code
### 100 分做法
```cpp
#include
#define ll long long
using namespace std;
ll n,a1,a0,b0,b1;
ll gcd(ll x,ll y)
{
if(y==0)return x;
else return gcd(y,x%y);
}
int main()
{
scanf("%lld",&n);
while(n--)
{
scanf("%lld%lld%lld%lld",&a0,&a1,&b0,&b1);
if(b1%a1!=0){printf("0\n");continue;}
ll ans=0,maxx=sqrt(b1);
for(int x=1;x<=maxx;x++)
{
if(b1%x!=0)continue;
if(x%a10)
if(gcd(b1/b0,b1/x)1)
if(gcd(x/a1,a0/a1)1)
ans++;
if(b1/xx)continue;
ll y=b1/x;
if(y%a10)
if(gcd(b1/b0,b1/y)1)
if(gcd(y/a1,a0/a1)==1)
ans++;
}
printf("%lld\n",ans);
}
}
### 50 分做法(暴力枚举 $a_1$ 的倍数,然后判断)
```cpp
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a1,a0,b0,b1;
ll gcd(ll x,ll y)
{
if(y==0)return x;
else return gcd(y,x%y);
}
int main()
{
scanf("%lld",&n);
while(n--)
{
scanf("%lld%lld%lld%lld",&a0,&a1,&b0,&b1);
if(b1%a1!=0){printf("0\n");continue;}
ll tt=0,ans=0;
while(1)
{
tt++;
if(tt*a1>b1)break;
ll x=tt*a1;
if(b1%x!=0)continue;
if(gcd(x,a0)!=a1)continue;
if(x*b0!=gcd(b0,x)*b1)continue;
ans++;
}
printf("%lld\n",ans);
}
}
[NOIP2009] $Hankson$ 的趣味题 (数论,gcd)的更多相关文章
- 1172 Hankson 的趣味题[数论]
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Descrip ...
- CodeForces 992B Nastya Studies Informatics + Hankson的趣味题(gcd、lcm)
http://codeforces.com/problemset/problem/992/B 题意: 给你区间[l,r]和x,y 问你区间中有多少个数对 (a,b) 使得 gcd(a,b)=x lc ...
- 【Luogu】P1072Hankson的趣味题(gcd)
这题真TM的趣味. 可以说我的动手能力还是不行,想到了算法却写不出来.以后说自己数论会GCD的时候只好虚了…… 我们首先这么想. x与a0的最大公约数为a1,那么我们把x/=a1,a0/=a1之后,x ...
- 【题解】洛谷P1072 Hankson的趣味题 (gcd和lcm的应用)
洛谷P1072:https://www.luogu.org/problemnew/show/P1072 思路 gcd(x,a0)=a1 lcm(x,b0)=b1→b0*x=b1*gcd(x,b0) ( ...
- P1072 Hankson 的趣味题[数论]
题目描述 Hanks 博士是 BT(Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲解了 ...
- 洛谷P1072 Hankson 的趣味题
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...
- 「NOIP2009」Hankson 的趣味题
Hankson 的趣味题 [内存限制:$128 MiB$][时间限制:$1000 ms$] [标准输入输出][题目类型:传统][评测方式:文本比较] 题目描述 Hanks 博士是 BT(Bio-Tec ...
- 算法训练 Hankson的趣味题
算法训练 Hankson的趣味题 时间限制:1.0s 内存限制:64.0MB 问题描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Han ...
- 1172 Hankson 的趣味题
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Descrip ...
随机推荐
- Java获取yml里面的配置
#yml文件配置systemPath: #档案系统地址 dossier: http://127.0.0.1:8088/ //调用说明 配置文件里必须包含节点 否则项目无法启动 @Value(" ...
- c++文件偏移
#include <iostream> #include <fstream> #include <cassert> using namespace std; int ...
- Ubuntu下命令行访问网站
第一步,需要安装一个名为w3m的软件工具,打开终端,输入如下命令 sudo apt-get install w3m 第二步,安装好w3m之后,在终端里面启动w3m,打开一个网址,比如w3m www ...
- Node.js 中文学习资料和教程导航
这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...
- Bootstrap 提示工具(Tooltip)插件方法的用法
方法 下面是一些提示工具(Tooltip)插件中有用的方法: 方法 描述 实例 Options: .tooltip(options) 向元素集合附加提示工具句柄. $().tooltip(option ...
- cocos2dx 字体描边遇到的描边缺失的bug
在cocos中,设置字体描边可以用enableOutline(cc.c4b(30, 10, 0, 255), 2)函数设置,第一个参数是字体颜色,第二个参数是描边轮廓大小,单位是2个像素, 我在使用过 ...
- Angular-网页定时刷新
类上方引入“OnInit”.“OnDestroy” import { OnInit, OnDestroy } from '@angular/core'; 类实现“OnInit”.“OnDestroy” ...
- 【转】 VC中TCP实现 异步套接字编程的原理+代码
所谓的异步套接字编程就是 调用了 如下函数 WSAAsyncSelect 设置了 套接字的状态为异步,有关函数我会在下面详细介绍... 异步套接字解决了 套接字编程过程中的堵塞问题 .... ...
- Codeforces 517 #B
http://codeforces.com/contest/1072/problem/B 开始想的只有搜索,时间复杂度$O(4^n)$,明显有问题. 想了半个小时没有思路,然后想到了正难则反,就开始步 ...
- MySQL的GTID复制与传统复制的相互切换
MySQL的GTID复制与传统复制的相互转换 1. GTID复制转换成传统复制 1.1 环境准备 1.2 停止slave 1.3 查看当前主从状态 1.4 change master 1.5 启动主从 ...