洛谷 P1072 Hankson 的趣味题 解题报告
P1072 \(Hankson\)的趣味题
题目大意:已知有\(n\)组\(a0,a1,b0,b1\),求满足\((x,a0)=a1\),\([x,b0]=b1\)的\(x\)的个数。
数据范围:\(1<=n<=2,000,a0,a1,b0,a1<=2*1e9\)
用不是特别快的方法水过去的。
暴力枚举\(b1\)的约数,代入检验。
普通枚举约数复杂度\(O(\sqrt(L))\),检验的复杂度\(O(logL)\)。
考虑到约数一个数\(k\)约数个数期望是\(log\)的。
所以先筛一遍质数,把\(b1\)分解质因数,然后用DFS跑出\(b1\)的所有约数,复杂度\(O(logn)\)
总体复杂度\(O(nlog^2L)\)
Code:
#include <cstdio>
#include <cmath>
const int N=50000;
int pri[N+10],v[N+10],is_pri[N+10],cnt;
void init()
{
for(int i=2;i<=N;i++)
{
if(!is_pri[i])
{
pri[++cnt]=i;
v[i]=i;
}
for(int j=1;j<=cnt&&pri[j]*i<=N;j++)
{
if(v[i]<pri[j]) break;
is_pri[i*pri[j]]=1;
v[i*pri[j]]=pri[j];
}
}
}
int d[N][2],cnt0=0;
void get(int a)
{
for(int i=1;i<=cnt&&a>=pri[i];i++)
{
if(a%pri[i]==0)
{
cnt0++;
d[cnt0][1]=pri[i];
d[cnt0][0]=0;
while(a%pri[i]==0)
{
d[cnt0][0]++;
a/=pri[i];
}
}
}
if(a>1) {d[++cnt0][1]=a;d[cnt0][0]=1;}
}
int f[N],cntt=0;
void dfs(int dep,int now)
{
if(dep==cnt0+1)
{
f[++cntt]=now;
return;
}
dfs(dep+1,now);
for(int i=1;i<=d[dep][0];i++)
{
now*=d[dep][1];
dfs(dep+1,now);
}
}
int gcd(int x,int y)
{
return y?gcd(y,x%y):x;
}
void work()
{
int a0,a1,b0,b1,ans=0;
scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
cnt0=0,cntt=0;
get(b1);
dfs(1,1);
for(int i=1;i<=cntt;i++)
{
int k1=gcd(f[i],b0),k2=gcd(f[i],a0);
if(k1*b1==f[i]*b0&&k2==a1)
ans++;
}
printf("%d\n",ans);
}
int main()
{
int n;init();
scanf("%d",&n);
while(n--)
work();
return 0;
}
2018.7.4
洛谷 P1072 Hankson 的趣味题 解题报告的更多相关文章
- 洛谷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的趣味题
这是个NOIP原题... 题意: 给定 a b c d 求 gcd(a, x) = b && lcm(c, x) = d 的x的个数. 可以发现一个朴素算法是从b到d枚举,期望得分50 ...
- 洛谷 - 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都分解质因数 ...
随机推荐
- 《Redis设计与实现》阅读笔记(一)--Redis学习
Redis学习资料与过程记录 在实习中经常会用到很多Redis,对Redis有了一些模糊的了解,总觉得隔靴搔痒的不痛快,所以决定开始深入的了解Redis,也作为我实习期间的目标. 这篇只是为了占个位置 ...
- SQL Server存储过程用法介绍
存储过程其实就是已预编译为可执行过程的一个或多个SQL语句. 通过调用和传递参数即可完成该存储过程的功能. 前面有介绍过存储过程的一些语法,但是没有详细示例,今天我们来一起研究一下存储过程. 提高性能 ...
- Spring入门学习笔记(4)——JDBC的使用
目录 Spring JDBC框架概览 JdbcTemplate类 配置数据源 数据访问对象(Data Access Object,DAO) 执行SQL命令 Spring JDBC框架概览 使用传统的J ...
- Hyperledger Fabric CA User’s Guide——配置设置(四)
配置设置 Fabric CA提供了三种方案去配置Fabric CA服务端和客户端,优先顺序是: CLI flags(标识) 环境变量 配置文件 在本文档的其余部分中,我们将对配置文件进行更改.但是,可 ...
- salt-api https连接问题
在非salt-api的主机上测试api连通性,测试代码如下: #!/usr/bin/env python import pycurl import StringIO import ssl ssl._c ...
- c++ getline()和get()的区别
1.方法get(char &)和get(void)提供不跳过空白的单字符输入功能:2.函数get(char * , int , char)和getline(char * , int , cha ...
- ftp部署及使用
常用软件安装及使用目录 http://www.jb51.net/article/106604.htm ftp部署 本篇文章主要介绍了CentOS7.0下安装FTP服务的方法,小编觉得挺不错的,现在 ...
- [译文]c#扩展方法(Extension Method In C#)
原文链接: https://www.codeproject.com/Tips/709310/Extension-Method-In-Csharp 介绍 扩展方法是C# 3.0引入的新特性.扩展方法使你 ...
- Python 标准库中的装饰器
题目描述 1.简单举例 Python 标准库中的装饰器 2.说说你用过的 Python 标准库中的装饰器 1. 首先,我们比较熟悉,也是比较常用的 Python 标准库提供的装饰器有:property ...
- python处理数据pandas视频资料
python强大数据处理工具pandas视频资料:https://pan.baidu.com/s/17VRd1cgFaKi20drfCgZ8Gg