Luogu P11036 GCD 与 LCM 问题:梦熊的题真是又神又逆天。

思路

观察到有个奇数的特殊性质,我们尝试从奇数构造入手。

先来尝试带入极端数据,对于 \(\gcd\),我们可以把 \(b=1\) 的情况先带进去看看。

\[a+b+c+d=\gcd(a,b)+\operatorname{lcm}(c,d)
\]
\[a+1+c+d=1+\operatorname{lcm}(c,d)
\]
\[a+c+d=\operatorname{lcm}(c,d)
\]

奇数情况

我们尝试在 \(a\) 为奇数的情况解这个方程。

首先我们依然是进行极端构造,先把 \(c=1\) 带入,可得:

\[a+1+d=d
\]

发现 \(d\) 被消去,我们无法求出 \(d\),所以我们要让 \(d\) 的系数加倍,以防止被抵消。

于是我们尝试把 \(c=2\) 带入,并且强制让 \(d\) 变成奇数,这样才能让这个 \(2\) 起效果。

\[a+2+d=2d
\]
\[d=a+2
\]

其中,\(a,d\) 皆为奇数,所以成立。

所以:

\[b=1,c=2,d=a+2
\]

场上我只想得出这个奇数构造了,偶数的没有想出来。现在看来我就是个傻逼。

偶数情况

我们发现奇数情况是不适用偶数情况的,所以要另辟蹊径。

于是我们要想办法让偶数情况变成奇数情况。

怎么变?

尝试把 \(a\) 中所有的 \(2\) 提出来,\(a\) 就变成奇数了!

这时:

\[a=2^k*p
\]

其中 \(p\) 为奇数。

所以我们可以对 \(p\) 的情况进行构造,然后将 \(c,d\) 同时乘上 \(2^k\) 输出就好了。

为什么不会超过限制?因为 \(d\) 最多才 \(a+2\),也就是说他最多比 \(a\) 要大 \(2^30\),极端情况下也只有 \(2^{30}+2^{29}=1610612736\),刚好卡过!

注意 \(b\) 不用扩倍,因为他立刻就能被消去。

总结

这题其实重点在于考虑从特殊性质入手,然后进行极端构造,最后尝试把难以解决的情况化为之前我们以及解决了的问题。是一道很好的构造练习题。

代码

#include <bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc ((p<<1)|1)
using namespace std;
typedef long long ll;
typedef pair<int,int> pi;
int t;
ll a,b,c,tms;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
{
cin>>a;
tms=1;
while(a%2==0)
{
a/=2;
tms*=2;
}
cout<<1<<' '<<2*tms<<' '<<(a+2)*tms<<endl;
}
return 0;
}

Luogu P11036 GCD 与 LCM 问题 [ 绿 ] [ 构造 ] [ 数论 ] [ adhoc ]的更多相关文章

  1. HDOJ 4497 GCD and LCM

    组合数学 GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  2. hdu 4497 GCD and LCM 数学

    GCD and LCM Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4 ...

  3. GCD 与 LCM UVA - 11388

    题目链接: https://cn.vjudge.net/problem/23709/origin 本题其实有坑 数据大小太大, 2的32次方,故而一定是取巧的算法,暴力不可能过的 思路是最大公因数的倍 ...

  4. 简单数论总结1——gcd与lcm

    并不重要的前言 最近学习了一些数论知识,但是自己都不懂自己到底学了些什么qwq,在这里把知识一并总结起来. 也不是很难的gcd和lcm 显而易见的结论: 为什么呢? 根据唯一分解定理: a和b都可被分 ...

  5. poj 2429 GCD &amp; LCM Inverse 【java】+【数学】

    GCD & LCM Inverse Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9928   Accepted:  ...

  6. HDU 4497 GCD and LCM (合数分解)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  7. hdu4497 GCD and LCM

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total S ...

  8. HDU 4497 GCD and LCM(数论+容斥原理)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  9. 数论——算数基本定理 - HDU 4497 GCD and LCM

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  10. HDU4497——GCD and LCM

    这个题目挺不错的,看到是通化邀请赛的题目,是一个很综合的数论题目. 是这样的,给你三个数的GCD和LCM,现在要你求出这三个数有多少种可能的情况. 对于是否存在这个问题,直接看 LCM%GCD是否为0 ...

随机推荐

  1. 本地环境搭建Virtualbox+Vagrant

    环境准备 virtualbox是免费,不必要费劲去找破解,下载就可以用. 使用virtualbox每次安装虚拟机,需要你去下载iso,然后设置虚拟机硬件配置,使用iso创建虚拟器.一系列的手工操作,如 ...

  2. Mybatis【17】-- Mybatis自关联查询一对多查询

    注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-13-oneself-one2many,需要自取, ...

  3. noip2024

    NOIP2024 游记 考试之前一直有很多话想在游记里说,但考完后又不知道该说些什么.这六个月的集训时光仿佛像一场梦一般. 怒砍\([60, 100] + 0 + 0 + 0\) 作为一个只学了不到一 ...

  4. dotnet core微服务框架Jimu ~ 基础网关

    网关提供外部访问内部微服务的统一入口,基于分布式和服务治理等功能特点,外部不能绕过网关调用内部微服务(框架本身提供外部可以直接访问内部微服务的功能,这里不作详细说明),外部通过 http 协议请求网关 ...

  5. Git 克隆部分文件

    使用 sparse-checkout (推荐) git clone \ -b master \ --depth=1 \ --filter=blob:none \ --sparse \ <repo ...

  6. 数据库开发规范v1.0

    一.建表规约 [强制]表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint( 1 表示是,0 表示否). 说明:任何字段如果为非负数,必须是 unsi ...

  7. P6474 [NOI Online #2 入门组] 荆轲刺秦王 题解

    荆轲将会臭名昭著 首先 $15$ 做法很简单,那就是直接 `cout<<-1` 考虑用 BFS 来解思路很简单,但是怎么求每个士兵的控制范围呢? 直接暴力时间复杂度是 $O(nma^2)$ ...

  8. 这些“人美话又多”的同事们:2022 Q1 招聘人员 评优名单公布

    ​ ​ 编辑 ​ 编辑 ​ 编辑 ​ 编辑 ​ 编辑 ​ 编辑 ​ 编辑 ​ 编辑 ​ 编辑 欢迎大家后台留言报名哈~ ​

  9. 在centos上部署docker与wordpress

    简介 有一个wordpress服务器需要迁移了,之前都是别人维护的,现在需要迁移到自己维护,给的系统是linux centos 8.4.迁移包括mysql,php,phpmyadmin,wordpre ...

  10. [python]邮件发送注意事项

    邮件格式 关于发信,需要遵循国际发信协议要求[4],例如RFC5322协议,避免因为格式不合法,导致被收信服务器拒收. 在二零二三年以前,在开发Python的邮箱发信接口时,对邮箱格式要求不高,主要还 ...