[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 ...
随机推荐
- python 基础之while无限循环
用户登录程序 username = "chenxi" passwed = "testki" counter = 0 while counter < 3: ...
- SC || 解决在git中上传过大文件的问题(如何将提交过的彻底删除
就在我在ddl前续命的时候……不知道怎么想不开,把v2的压力测试的日志(500多M)也往github上传 之前听说过好多因为传了大文件的锅…… 我竟然还想不开的往上传…… 真实又傻又蠢又自闭(T T ...
- 已知一棵完全二叉树,求其节点的个数 要求:时间复杂度低于O(N),N为这棵树的节点个数
package my_basic.class_4; public class Code_08_CBTNode { // 完全二叉树的节点个数 复杂度低于O(N) public static class ...
- c3p0,dbcp和proxool
关于c3p0.dbcp和proxool,之类的比较,配置在网上有很多的文章,我这边就不浪费大家的时间了,主要讲下我用过这三个之后的体会. dbcp:框架以前使用的是dbcp,网上说,有很多BUG,至少 ...
- js菜鸟备忘
1.图片切换 function changeImage() { var img = document.getElementById("myImg"); ")) img.s ...
- Bootstrap 缩略图
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- Linux 、AIX环境下查看oracle配置信息(service_name、SID、tnsname)。
SID: echo $ORACLE_SID service_name: sqlplus / as sysdba; show parameter instance_name; show paramete ...
- 【Arduino开发板刷Bootloader01】
其接线方式就是: Programmer(工具开发板) Being programmed(目标开发板) Vcc ...
- Seven Puzzle Aizu - 0121 (搜索)
7 パズル ime limit1000 ms Memory limit131072 kB OSLinux Source3rd PC Koshien, Final 7 パズルは 8 つの正方形のカードと ...
- L2-006 树的遍历 RTA
L2-006 树的遍历(25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树 ...