【Hankson 的趣味题】
可能我只适合这道题的50分
但还是要争取一下的
我们知道对于\(gcd\)和\(lcm\)有这样的定义
\(a=\prod _{i=1}^{\pi(a)}p_i^{d_{i}}\)
\(b=\prod _{i=1}^{\pi(b)}p_i^{g_{i}}\)
那么则有
\(gcd(a,b)=\prod_{i=1}^{\pi(max(a,b))} p_i^{min(g_i,d_i)}\)
\(lcm(a,b)=\prod_{i=1}^{\pi(max(a,b))} p_i^{max(g_i,d_i)}\)
把上面的式子翻译成汉语就是
如果我们将\(a,b\)质因数分解,那么对于\(a,b\)所有同一个质因子,指数较小的相乘得到的就是\(gcd(a,b)\),指数较大的相乘得到的就是\(lcm(a,b)\)
比如说\(12,8\)吧
我们分解质因数
\(12=2^2*3^1\)
\(8=2^3\)
所以\(gcd(12,8)=2^{min(2,3)}*3^{min(1,0)}=2^2=4\)
\(lcm(12,8)=2^{max(2,3)}*3^{max(1,0)}=2^3*3^1=24\)
于是有了这个性质,我们做这道题就比较简单了
那我们的核心就是把\(a0,a1,b0,b1\)都分解质因数
之后对于相同的质因子我们都要讨论一下他的指数,来推出\(x\)的指数
如果有解的话,这个指数必定是一个范围,所以我们可以求出每个指数的范围之后乘法原理得出答案
如果无解我们就中途判断推出就好了
但是还有一个问题,我们分解质因数的话应该怎么分解,分解到一个什么范围
我们知道整数还有一个一个性质:每个整数\(n\)至多有一个大于\(\sqrt{n}\)的质因子
尽管这里的数都很大,小于等于\(2E9\)但是我们只需要筛出\(1\)到\(\sqrt{2E9}\)之间的质数,剩下的那个质因子我们特判就可以了
代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<bitset>
#define LL long long
#define re register
#define maxn 50005
using namespace std;
int T;
int p[maxn],tot;
bitset<maxn> f;
LL a0,a1,b0,b1;
inline LL read()
{
char c=getchar();
LL x=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-48,c=getchar();
return x;
}
int main()
{
T=read();
f[1]=1;
for(re int i=2;i<=maxn-5;i++)
{
if(!f[i]) p[++tot]=i;
for(re int j=1;j<=tot&&p[j]*i<=maxn-5;j++)
{
f[p[j]*i]=1;
if(i%p[j]==0) break;
}
}//欧拉筛,由于sqrt(2000000000)大概为45000,所以筛到50000就可以了
while(T--)
{
LL ans=1;
int flag=0;
a0=read();
a1=read();
b0=read();
b1=read();
for(re int i=1;i<=tot;i++)
{
if(a0==1&&a1==1&&b0==1&&b1==1) break;
int num1=0,num2=0,num3=0,num4=0;
while(a0%p[i]==0) num1++,a0/=p[i];
while(a1%p[i]==0) num2++,a1/=p[i];
while(b0%p[i]==0) num3++,b0/=p[i];
while(b1%p[i]==0) num4++,b1/=p[i];
//统计这个质因子对应的指数应该是多少
if(num1<num2||num3>num4) //如果这个a0质因子的指数小于a1的,那么就无解,因为a1的指数应该是最小的
//如果这个b0质因子的指数大于b1的,那么就无解,因为b1的指数应该是最大的
{
flag=1;
break;
}
if(num3<num4)
//如果b0的指数小于b1的,说明x此时的指数应该为num4,所以此时对答案没有贡献,判断是否有解之后退出
{
if(min(num4,num1)!=num2)
{
flag=1;
break;
}
continue;
}
if(num1>num2)
//如果a0的指数大于a1的,说明x此时的指数应该为num2,所以此时对答案没有贡献,判断是否有解之后退出
{
if(max(num2,num3)!=num4)
{
flag=1;
break;
}
continue;
}
if(num3<num1)
{
flag=1;
break;
}
ans=ans*(num3-num1+1);
}
if(!flag&&(a1!=1||a0!=1||b0!=1||b1!=1))
{
if(a1>a0) flag=1;
if(b1<b0) flag=1;
if(b1==b0&&b1!=1) ans<<=1;
}
if(!flag) cout<<ans<<endl;
else puts("0");
}
}
【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 博 ...
- 一本通1626【例 2】Hankson 的趣味题
1626:[例 2]Hankson 的趣味题 题目描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson 正在思考 ...
- 洛谷 P1072 Hankson 的趣味题 解题报告
P1072 \(Hankson\)的趣味题 题目大意:已知有\(n\)组\(a0,a1,b0,b1\),求满足\((x,a0)=a1\),\([x,b0]=b1\)的\(x\)的个数. 数据范围:\( ...
- CH3201 Hankson的趣味题
题意 3201 Hankson的趣味题 0x30「数学知识」例题 描述 Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson.现在,刚刚放学回家的Hankson ...
- luogu P1072 Hankson的趣味题
题目链接 luogu P1072 Hankson 的趣味题 题解 啊,还是noip的题好做 额,直接推式子就好了 \(gcd(x,a_0)=a_1=gcd(\frac{x}{a_1},\frac{a_ ...
- 洛谷P1072 Hankson 的趣味题
P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...
- NOIP 2009 Hankson 的趣味题
洛谷 P1072 Hankson 的趣味题 洛谷传送门 JDOJ 1648: [NOIP2009]Hankson的趣味题 T2 JDOJ传送门 Description Hanks 博士是BT (Bio ...
随机推荐
- js事件绑定简单写法
$E.on = function (o, e, f) { return o.addEventListener ? o.addEventListener(e, f, false) : o.attachE ...
- C#基础知识-使用XML完成一个小程序(十一)
上一篇中讲到XML基本的结构,还有增删改查的方法,这一篇中我们就来利用XML来完成一个简单的订单系统,主要是实现一个简单学生名单的增删改查,如果想要应用到实际的环境中建议考虑数据量的问题,如果数据量大 ...
- jQuery extend方法详解
先说个概念的东西: jQuery为开发插件提拱了两个方法,分别是: $.fn.extend(item):为每一个实例添加一个实例方法item.($("#btn1") 会生成一个 j ...
- delegate与hover和blur冲突问题及解决方法
一.冲突 hover和blur都是含有两个函数参数的方法,分别表示事件的两种对立状态的相应方法. delegate用于处理事件委托等场景,只能传一个函数参数. 冲突:delegate无法完整传入hov ...
- innerHTML、innerText、outerHTML、textContent的区别
示例html代码: <div id="test"> <span style="color:red">test1</span> ...
- ccf-201609-2 火车购票
问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...
- 51Nod1601 完全图的最小生成树计数
传送门 我居然忘写题解啦!(记忆废) 不管怎么说,这题还算是一道好题啊……你觉得敦爷出的题会有水题么 …… 这题比较容易把人误导到Boruvka算法之类的东西上去(我们机房去刚D题的人一开始大多也被误 ...
- 优秀iOS文章集合
Runtime 10种用法(没有比这更全的了成为iOS顶尖高手,你必须来这里(这里有最好的开源项目和文章)iOS逆向Reveal查看任意app 的界面JSPatch (实时修复App Store bu ...
- 将ReportingService 2008配置为匿名访问 - 转载
众所周知在ReportingService 2008中微软取消了匿名访问,我们再也不能像2005时那样靠修改IIS来实现匿名访问了.但在微软MSDN BLOG中还是提供了以下这种设置匿名访问的方式. ...
- Tesseract-OCR-02-Tesseract-OCR 的安装与 环境变量配置
Windows 下 Tesseract-OCR 的安装与 环境变量配置 本篇介绍Windows下Tesseract-OCR的安装与环境配置,然后做一个图片的文字识别测试 Windows下 Tesser ...