【2023.03.14】Luogu P8813【CSP-J 2022】解密

文章介绍了在解决一个给定正整数问题时,作者尝试了暴力法、二分法和数学方法(利用整式乘除和和积原理),展示了每种方法的逻辑和代码实现,最终实测暴力法70pts,二分法100pts,数学法100pts。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

比赛的时候想出了三种做法,暴力二分还有数学。额,实测暴力70pts,二分100pts,数学100pts。但是比赛的时候这道题还是保龄了(我才不会告诉你我freopen调试的时候加的注释没有删掉呢,在这写下题解算是警戒和纪念吧(纪念保龄。这里介绍暴力二分数学三种做法,不过二分的代码我给删了,先放一下其他大佬的代码吧(当然是照着敲一遍的,我才懒得找人家说明情况

题目:

Luogu:Link

简要:

给定一个正整数 k k k,有 k k k 次询问,每次给定三个正整数 n i , e i , d i n_i, e_i, d_i ni,ei,di,求两个正整数 p i , q i p_i, q_i pi,qi,使 n i = p i × q i n_i = p_i \times q_i ni=pi×qi e i × d i = ( p i − 1 ) ( q i − 1 ) + 1 e_i \times d_i = (p_i - 1)(q_i - 1) + 1 ei×di=(pi1)(qi1)+1

输入格式

第一行一个正整数 k k k,表示有 k k k 次询问。

接下来 k k k 行,第 i i i 行三个正整数 n i , d i , e i n_i, d_i, e_i ni,di,ei

输出格式

输出 k k k 行,每行两个正整数 p i , q i p_i, q_i pi,qi 表示答案。

为使输出统一,你应当保证 p i ≤ q i p_i \leq q_i piqi

如果无解,请输出 NO

样例输入 #1
10
770 77 5
633 1 211
545 1 499
683 3 227
858 3 257
723 37 13
572 26 11
867 17 17
829 3 263
528 4 109
样例输出 #1
2 385
NO
NO
NO
11 78
3 241
2 286
NO
NO
6 88

Step 1 暴力:

额,暴力做法非常简单,照着题意直接敲就好了。用两层For循环分别枚举pq的话肯定会T得很惨,那么考虑优化。

我们不妨来看看pq还必须满足什么条件(前置知识:整式的乘除)。

我们已知:

e i × d i = ( p i − 1 ) ( q i − 1 ) + 1 ; e_i \times d_i = (p_i - 1)(q_i - 1) + 1 ; ei×di=(pi1)(qi1)+1;

展开就是:

e i × d i = p i × q i − p i − q i + 1 + 1 ; e_i \times d_i = p_i \times q_i - p_i - q_i + 1 + 1 ; ei×di=pi×qipiqi+1+1;

化简可得:

e i × d i = p i × q i − ( p i + q i ) + 2 ; e_i \times d_i = p_i \times q_i - (p_i + q_i) + 2 ; ei×di=pi×

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值