博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【题解】 P1072 Hankson 的趣味题
阅读量:6191 次
发布时间:2019-06-21

本文共 1004 字,大约阅读时间需要 3 分钟。

\(Description:\)

给定\(a_0,a_1,b_0,b_1\),求所有满足\(gcd(x,a_0)=a_1\),\(lcm(x,b_0)=b_1\)的x的个数。

\(Sample\) \(Input\):

2

41 1 96 288
95 1 37 1776

\(Sample\) \(Output\):

6

2

数论题都那么毒瘤吗?

一开始除了暴力毫无思路。。。

暴力:从\(a_1->b_1\)枚举。。。。。。

没有思路,化个式子放松放松:

\(a_0=a_1*k_1\)

\(x=a_1*k_2\)

\(b_1=b_0*k_3\)

\(b_1=x*k_4\)

震惊!发现x是\(a_1\)的倍数,是\(b_1\)的因数。

于是想着随便枚举\(b_1\)的因数,gcd,lcm判断。

喵的过了。。。。。。

要不要看代码呀?

#include
#define int long longusing namespace std;int T,ans;int a0,b0,a1,b1;inline int gcd(int a,int b){ int tmp=0; while(b){ if(a

然而题解里还有一种更强的做法:

首先一个推论:

对于\(gcd(a,b)=c\),\(gcd(a/c,b/c)=1\)

证明:

\(a=c*k_1\),\(b=c*k_2\)

那么如果推论不成立,那么一定有\(k_1*k_2\)里还有a,b公因数。

那么可以继续拆分

那么原式变为:

\(gcd(x,a_0)=a_1\) \(=>\) \(gcd(x/a_1,a_0/a_1)=1\)

\(lcm(x,b_0)=b1\) \(=>\) \(gcd(b_1/b_0,b_1/x)=1\)

这样枚举范围小一点,照理说会快,然而我却慢了。

#include
#define int long longusing namespace std;int T,ans;int a0,b0,a1,b1;inline int gcd(int a,int b){ int tmp=0; while(b){ if(a

转载于:https://www.cnblogs.com/JCNL666/p/10641259.html

你可能感兴趣的文章
怎样轻松将SD卡照片数据恢复
查看>>
Gsoap编译
查看>>
Linux下函数调用堆栈帧的详细解释【转】
查看>>
洛谷P2765 魔术球问题(贪心 最大流)
查看>>
SQL Server2016 配置管理器
查看>>
并发下线程池的最佳数量计算
查看>>
@EnableAsync和@Async开始异步任务支持
查看>>
匿名内部类和内部类中的this
查看>>
[Python设计模式] 第27章 正则表达式——解释器模式
查看>>
ROS设备的性价比图
查看>>
日志分析方法
查看>>
Android TV 开发 (1)
查看>>
The POM for XXX is invalid, transitive dependencies (if any) will not be available解决方案
查看>>
让你的系统“坚挺不倒”的最后一个大招——「降级」
查看>>
处理linux下面的mysql乱码问题(下面的utf8换成gb2312也是可以的)
查看>>
Java常见设计模式之适配器模式
查看>>
免费 官方的ASP.NET MVC电子书-Professional ASP.NET MVC 1.0
查看>>
MS CRM 2011 RetrieveMultiple with JScript JQuery Silverlight LINQ FetchXML and QueryExpression
查看>>
Elasticsearch: Indexing SQL databases. The easy way
查看>>
应用开发框架之——插件、包
查看>>