luogu P1072 $Hankson$ 的趣味题
这里提供两种做法
sol 1
考虑两个数\(A,B\)和\(C=gcd(A,B),D=lcm(A,B)\)的关系
设\(S=\{2,3,5...P_n\}\)为质数集合\(p_{x,i}\)表示\(x\)的第\(i\)种质因子数量
显然\(p_{C,i}=min(p_{A,i},p_{B,i}),p_{D,i}=max(p_{A,i},p_{B,i})\)
所以对于每种质因子,考虑在\(a_0,a_1,b_0,b_1\)的出现次数,这里分别记为\(o_1,o_2,o_3,o_4\)
以下几种情况无解
1.\(o_1<o_2\)或\(o_3>o_4\) (推出的结论)
2.\(o_1=o_2\)且\(o_3=o_4\)且\(o_1>o_3\) (答案这一种质因子数量取值范围\([o_1,o_3]\))
3.\(o_1>o_2\)且\(o_3<o_4\)且\(o_2\ne o_4\) (答案这一种质因子数量是\(o_2\),也是\(o_4\))
其他情况下,对于每一种质因子,\(ans*=(o_3-o_1+1)\)
代码被吞了qwq 其实本来就没有
sol 2
考虑枚举答案
答案显然是\(b_1\)的因数,所以只要枚举\(i\)从\(1\)到\(\sqrt{b_1}\),判断\(i\)和\(\frac{b_1}{i}\)救星了
注意\(i=\frac{b_1}{i}\)的情况
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#include<queue>
#include<map>
#define LL long long
#define il inline
#define re register
using namespace std;
const LL mod=1000000007;
il LL rd()
{
re LL x=0,w=1;re char ch;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int prm[5010],pp[50010],tt;
il LL gcd(LL a,LL b)
{
LL tm;
while(b){tm=a,a=b,b=tm%b;}
return a;
}
il LL lcm(LL a,LL b)
{
return a*b/gcd(a,b);
}
int main()
{
for(int i=2;i<=45000;i++)
{
if(!pp[i]) pp[i]=i,prm[++tt]=i;
for(int j=1;j<=tt&&i*prm[j]<=45000;j++)
{
pp[i*prm[j]]=prm[j];
if(i%prm[j]==0) break;
}
}
int q=rd();
while(q--)
{
int a0=rd(),a1=rd(),b0=rd(),b1=rd(),sq=sqrt(b1),ans=0;
for(int i=1;i<=sq;i++)
{
if(b1%i) continue;
if(gcd(i,a0)==a1&&lcm(i,b0)==b1) ++ans;
if(i*i==b1) continue;
if(gcd(b1/i,a0)==a1&&lcm(b1/i,b0)==b1) ++ans;
}
printf("%d\n",ans);
}
return 0;
}
luogu P1072 $Hankson$ 的趣味题的更多相关文章
- luogu P1072 Hankson的趣味题
题目链接 luogu P1072 Hankson 的趣味题 题解 啊,还是noip的题好做 额,直接推式子就好了 \(gcd(x,a_0)=a_1=gcd(\frac{x}{a_1},\frac{a_ ...
- 【Luogu】P1072Hankson的趣味题(gcd)
这题真TM的趣味. 可以说我的动手能力还是不行,想到了算法却写不出来.以后说自己数论会GCD的时候只好虚了…… 我们首先这么想. x与a0的最大公约数为a1,那么我们把x/=a1,a0/=a1之后,x ...
- [NOIp2009] luogu P1072 Hankson 的趣味题
把 c 改成 d 下了两个点. 题目描述 已知正整数 a0,a1,b0,b1a_0,a_1,b_0,b_1a0,a1,b0,b1,设某未知正整数 xxx 满足: xxx 和 a0a_0a0 ...
- luogu 1072 Hankson 的趣味题 唯一分解定理+线性筛
貌似是比大多数题解优的 $O(n^2logn)$ ~ Code: #include <bits/stdc++.h> #define N 50004 #define setIO(s) fre ...
- 洛谷P1072 [NOIP2009] Hankson 的趣味题
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...
- 算法训练 Hankson的趣味题
算法训练 Hankson的趣味题 时间限制:1.0s 内存限制:64.0MB 问题描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Han ...
- 1172 Hankson 的趣味题[数论]
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Descrip ...
- 1172 Hankson 的趣味题
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Descrip ...
- Codevs 1172 Hankson 的趣味题 2009年NOIP全国联赛提高组
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Hanks 博 ...
随机推荐
- js對象構造
創建對象的3種方式: 1. var a=new Object() a.attributes=“1”: 2. var a={attributes:"1",aa:"2&quo ...
- Lodop在页面获取打印机列表 选择打印机预览
利用GET_PRINTER_COUNT,获取打印机个数,然后用GET_PRINTER_NAME(intPrinterIndex);循环获取打印机名称,添加到list列表里,可以让用户在页面就选择打印机 ...
- Linux 编译命令参数
基本格式:gcc [options] file1 file2... //若不加入参数,则按默认参数依次执行编译.汇编和链接操作,生成的可执行文件名为 a.out 常用参数:-E //只执行预处理操作 ...
- BZOJ5300 [Cqoi2018]九连环 【数学】【FFT】
题目分析: 这道题是数学必修五的原题,做法如下图,书上讲得很详细了. 那么这道题目用快速幂就可以解决了,值得注意的是,分析时间复杂度会发现直接做乘法其实是O(n^2)的,但是有一个1/20左右的常数, ...
- day11 内置函数
特殊算数运算 计算整数的和 l = [1,2,3,4,5] print(sum(l)) 除法运算,然后取余 在做页面的时候可以根据数据量分页的时候使用 print(divmod(10,3)) # (3 ...
- luogu1080 国王游戏(贪心+高精度)
貌似这道题是碰巧蒙对了贪心的方式..就是把ai*bi越小的放在越前面 (不过也符合直觉) 然后统计答案需要用高精度,然后就调了一年 #include<cstdio> #include< ...
- bzoj3698 XWW的难题
题意:给你个n * n的实数矩阵,你需要把它中的每个数上/下取整,并满足如下条件: 每行最后一个数等于前面的和. 每列最后一个数等于前面的和. n行n列的那个元素始终为0,不予考虑. 求满足条件下矩阵 ...
- maven项目检出后报错(包括编译报错和运行报错)的常见检查处理方式
maven项目检出后报错(包括编译报错和运行报错)的常见检查处理方式: 1.更改项目的jdk为我们安装的jdk2.更改build配置里的 output folder 目录为 xxx项目名/target ...
- 最短路算法--SPFA+嵌套map
hdu 2066 #include<iostream> #include<cstdio> #include<cstring> #include<queue ...
- advancedsearch.php织梦高级自定义模型字段无法调用解决方案
advancedsearch.php织梦dedecms 高级自定义模型字段无法调用解决方案 ,具体步骤如下: 1 打开修改puls/advancedsearch.php文件,找到复制代码(不同版本可 ...