洛谷P1072 Hankson的趣味题
这是个NOIP原题...
题意:
给定 a b c d 求 gcd(a, x) = b && lcm(c, x) = d 的x的个数。
可以发现一个朴素算法是从b到d枚举,期望得分50分。
(为什么lyd大佬的暴力就是90...)
有个要点就是所求的x必定为d的约数。
然后根据lcm和gcd的性质,拆成质因数。
x的每个质因数个数是有范围的,可以求出来。
然后乘起来就行了。
注意要分类讨论,别用书上写的,有毒。
#include <cstdio>
const int N = ; int p[N], top;
bool vis[N]; inline void getp(int b) {
for(int i = ; i <= b; i++) {
if(!vis[i]) {
p[++top] = i;
}
for(int j = ; j <= top && i * p[j] <= b; j++) {
vis[i * p[j]] = ;
if(i % p[j] == ) {
break;
}
}
}
return;
} inline void clear() { return;
} inline int getcnt(int pr, int a) {
if(a % pr) {
return ;
}
int ans = ;
a /= pr;
while(a % pr == ) {
ans++;
a /= pr;
}
return ans;
} inline void solve() {
int a, b, c, d;
scanf("%d%d%d%d", &a, &b, &c, &d);
int d1 = d, ans = ;
int ta, tb, tc, td;
for(int i = ; i <= top && p[i] <= d1; i++) {
if(d1 % p[i]) {
continue;
}
td = ;
d1 /= p[i];
while(d1 % p[i] == ) {
d1 /= p[i];
td++;
}
ta = getcnt(p[i], a);
tb = getcnt(p[i], b);
tc = getcnt(p[i], c);
if(tc < td) { // ans = td
if((ta > tb && tb == td) || (ta == tb && tb <= td)) {
;
}
else {
printf("0\n");
return;
}
}
else if(tc == td) { // ans <= td
if(ta > tb && tb <= td) {
;
}
else if(ta == tb && tb <= td) {
ans *= (td - tb + );
}
else {
printf("0\n");
return;
}
}
}
if(d1 > ) {
td = ;
ta = getcnt(d1, a);
tb = getcnt(d1, b);
tc = getcnt(d1, c);
if(tc < td) { // ans = td
if((ta > tb && tb == td) || (ta == tb && tb <= td)) {
;
}
else {
printf("0\n");
return;
}
}
else if(tc == td) { // ans <= td
if(ta > tb && tb <= td) {
;
}
else if(ta == tb && tb <= td) {
ans *= (td - tb + );
}
else {
printf("0\n");
return;
}
}
}
printf("%d\n", ans);
return;
} int main() {
getp();
int T;
scanf("%d", &T);
while(T--) {
solve();
if(T) {
clear();
}
} return ;
}
AC代码
洛谷P1072 Hankson的趣味题的更多相关文章
- 洛谷 P1072 Hankson 的趣味题 解题报告
P1072 \(Hankson\)的趣味题 题目大意:已知有\(n\)组\(a0,a1,b0,b1\),求满足\((x,a0)=a1\),\([x,b0]=b1\)的\(x\)的个数. 数据范围:\( ...
- 洛谷P1072 Hankson 的趣味题
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...
- Java实现洛谷 P1072 Hankson 的趣味题
P1072 Hankson 的趣味题 输入输出样例 输入 2 41 1 96 288 95 1 37 1776 输出 6 2 PS: 通过辗转相除法的推导 import java.util.*; cl ...
- 【题解】洛谷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 的趣味题(题解)
https://www.luogu.org/problemnew/show/P1072(题目传送) 数学的推理在编程的体现越来越明显了.(本人嘀咕) 首先,我们知道这两个等式: (a0,x)=a1,[ ...
- 洛谷 P1072 Hankson 的趣味题
题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现 在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲 ...
- [NOIP2009] 提高组 洛谷P1072 Hankson 的趣味题
题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现 在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲 ...
- 洛谷 - P1072 Hankson - 的趣味题 - 质因数分解
https://www.luogu.org/problemnew/show/P1072 一开始看了一看居然还想放弃了的. 把 \(x,a_0,a_1,b_0,b_1\) 质因数分解. 例如 \(x=p ...
- 洛谷 P1072 Hankson 的趣味题 || 打质数表的分解质因数
方法就是枚举,根据b0和b1可以大大减小枚举范围,方法类似这个http://blog.csdn.net/hehe_54321/article/details/76021615 将b0和b1都分解质因数 ...
随机推荐
- C# Note12:WPF只允许数字的限制性TextBox
在使用中,我们经常遇到文本框中只允许输入数字(整型数或浮点数...) 的情况,如果我们输入特殊字符(字母和符号...),在获取其输入值时,如果先做判断或其他处理,会直接导致application发生c ...
- 在JavaEE中使用Mybatis框架
MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录.每个MyB ...
- adoquery.refresh和adoquery.query的区别
大的区别没有 1: requery是通过重新发出原始命令并再次检索数据,可使用 Requery 方法刷新来自数据源的 Recordset 对象的全部内容.调用该方法等于相继调用 Close 和 Ope ...
- JSED204B
简介 JESD204是一种连接数据转换器(ADC和DAC)和逻辑器件的高速串行接口,该标准的 B 修订版支持高达 12.5 Gbps串行数据速率,并可确保 JESD204 链路具有可重复的确定性延迟. ...
- nargin
nargin 编辑 nargin为“number of input arguments”的缩写. 在matlab中定义一个函数时, 在函数体内部, nargin是用来判断输入变量个数的函数.在matl ...
- The Xamarin Live Player Unpacked
It is 2017, and it is almost criminal to say that your app doesn't work on a given mobile platform. ...
- 搭建Hexo博客(三)—换电脑继续写Hexo博客
Hexo和GitHub搭建博客的原理是:Hexo将source下的md文件生成静态的html页面,存放到public目录中,这一步是由命令:hexo -g完成.接下来执行hexo -d命令,就将pub ...
- 第四十一天 socker server和 event
今日内容 1.基于TCP的socketserver 2.基于UDP的socketserver 3.event 一.TCP的socketserver #服务器 import socketserver f ...
- Dijkstra—校园景点游览问题
#include<iostream> #include<cstdio> #include<cstring> #define MAX 9999999 using na ...
- Android app下载并安装
1 下载功能 //下载apk private void downloadApk(String apkUrl) throws PackageManager.NameNotFoundException ...