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. 教你如何编写、保存与运行 Python 程序

    第一步 接下来我们将看见如何在 Python 中运行一个传统的“Hello World”程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Python 来运行的你的程 ...

  2. POJ2251-Dungeon Master(3维BFS)

    You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...

  3. 微信小程序自定义 tabbar

    一定的需求情况下,无法使用小程序原生的 tabbar 的时候,需要自行实现一个和 tabbar 功能一模一样的自制组件. 查阅了海量的博客和文档之后,亲自踩坑.总结了三种在不使用微信小程序原生 tab ...

  4. Netty源码分析第1章(Netty启动流程)---->第2节: NioServerSocketChannel的创建

    Netty源码分析第一章:  Server启动流程 第二节:NioServerSocketChannel的创建 我们如果熟悉Nio, 则对channel的概念则不会陌生, channel在相当于一个通 ...

  5. 高可用OpenStack(Queen版)集群-3.高可用配置(pacemaker&haproxy)

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

  6. 爬虫进阶教程:极验(GEETEST)验证码破解教程

    摘要 爬虫最大的敌人之一是什么?没错,验证码!Geetest作为提供验证码服务的行家,市场占有率还是蛮高的.遇到Geetest提供的滑动验证码怎么破?授人予鱼不如授人予渔,接下来就为大家呈现本教程的精 ...

  7. 04-matplotlib-柱形图

    import numpy as np import matplotlib.pyplot as plt # 柱形图 # 例一 N =5 y = [15,28,10,30,25] index = np.a ...

  8. linux 安装配置zookeeper脚本

    #!/bin/bash # automatic install zookeeper echo "========= Start to install zookeeper ========== ...

  9. 44 道 JavaScript 难题(JavaScript Puzzlers!)

    JavaScript Puzzlers原文 1. ["1", "2", "3"].map(parseInt) 答案:[1, NaN, NaN ...

  10. IOS上z-index和fixed定位无效

    IOS上z-index和fixed定位无效 在该元素上加: -webkit-transform:translateZ(1px); -moz-transform:translateZ(1px); -o- ...