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 的趣味题 解题报告的更多相关文章

  1. 洛谷P1072 Hankson 的趣味题

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

  2. Java实现洛谷 P1072 Hankson 的趣味题

    P1072 Hankson 的趣味题 输入输出样例 输入 2 41 1 96 288 95 1 37 1776 输出 6 2 PS: 通过辗转相除法的推导 import java.util.*; cl ...

  3. 【题解】洛谷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) ( ...

  4. 洛谷P1072 Hankson 的趣味题(题解)

    https://www.luogu.org/problemnew/show/P1072(题目传送) 数学的推理在编程的体现越来越明显了.(本人嘀咕) 首先,我们知道这两个等式: (a0,x)=a1,[ ...

  5. 洛谷 P1072 Hankson 的趣味题

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

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

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

  7. 洛谷P1072 Hankson的趣味题

    这是个NOIP原题... 题意: 给定 a b c d 求 gcd(a, x) = b && lcm(c, x) = d 的x的个数. 可以发现一个朴素算法是从b到d枚举,期望得分50 ...

  8. 洛谷 - P1072 Hankson - 的趣味题 - 质因数分解

    https://www.luogu.org/problemnew/show/P1072 一开始看了一看居然还想放弃了的. 把 \(x,a_0,a_1,b_0,b_1\) 质因数分解. 例如 \(x=p ...

  9. 洛谷 P1072 Hankson 的趣味题 || 打质数表的分解质因数

    方法就是枚举,根据b0和b1可以大大减小枚举范围,方法类似这个http://blog.csdn.net/hehe_54321/article/details/76021615 将b0和b1都分解质因数 ...

随机推荐

  1. linux下实现压测-html报表生成-控制台参数优化【jmeter】

    jmeter - 单机压测 - 命令行模式-html报表生成-控制台参数优化 一/ 准备工作 1.压力机安装并配置好 jdk 2.调试好程序脚本 再上传到 linux下 3.进入jmeter  bin ...

  2. 为什么 jmeter 分布式测试,一定要设置 java.rmi.server.hostname

    之前总结了 jmeter 分布式测试的过程,在部署过程中提到,要在 system.properties 中配置自己的 IP. 至于为什么要这么做,源于这一次 debug 的过程. 运行环境 mint, ...

  3. 高可用OpenStack(Queen版)集群-7.Neutron控制/网络节点集群

    参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...

  4. SharpDevelop 笔记

    1. 下载地址: http://jaist.dl.sourceforge.net/project/sharpdevelop/ 2. 使用 VS2012 去掉编译不通过的 Test ,其它可以运行调试. ...

  5. ansible使用1

    常用软件安装及使用目录   ansible软件2 ### ansible软件部署安装需求#### 01. 需要有epel源 系统yum源(base epel--pip gem) sshpass---e ...

  6. springboot通过http访问——修改访问的端口号

    文章转载来于:https://blog.csdn.net/zknxx/article/details/53433592 有时候我们可能需要启动不止一个SpringBoot,而SpringBoot默认的 ...

  7. vue入门之单文件组件

    介绍 在很多 Vue 项目中,我们使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页面内指定一个容器元素. 这种方式在很多 ...

  8. [2019BUAA软件工程]第0次个人作业

    我 & 计算机 写在前面   撰写本博客时,笔者正就读北航计算机系大三下的软件工程课程.借由这次博客作业的机会,笔者从高考时与计算机专业结缘.大学对计算机的学习以及对未来的计划三方面进行了些许 ...

  9. 关于 Java连接sql的转载

    Java连接SQL Server 2000数据库时,有两种方法: (1)通过Microsoft的JDBC驱动连接.此JDBC驱动共有三个文件,分别是mssqlserver.jar.msutil.jar ...

  10. Enterprise Library 5.0 参考源码索引

    http://www.projky.com/entlib/5.0/Microsoft/Practices/EnterpriseLibrary/Caching/BackgroundScheduler.c ...