BUCT-2021年ACM竞赛班训练(六)2021.4.29-问题 B: 五一假期前的最后一道题

59 篇文章 23 订阅
这篇博客介绍了如何编程解决一道数论作业问题,该问题涉及无限递归分数的求解。博主通过分析题目,设未知数并建立方程,推导出解的公式。然后针对给定的输入n,利用编程计算出1+1/n+1/n+...的值,并用三个整数a、b、c表示答案。代码中考虑了数值范围和可能的约分情况,确保了正确性和效率。博客适合对数论和编程感兴趣的读者。
摘要由CSDN通过智能技术生成


五一假期前的最后一道题

传送门

时间限制:1秒
空间限制:128M


题目描述

后天就是五一假期了,小L约好了女生一起出去玩。他还剩下最后一道数论作业,写完就可以去嗨了。

题目是,求 1 + 1 1 + 1 1 + 1 1 + ⋯ 1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\cdots}}} 1+1+1+1+111的值。

怀揣着与女神约会的激动心情,小L飞快地算了起来。一天、两天、 ⋯ \cdots 眼看五一假期就要来了,这个计算何时才到尽头!

于是他找到了会编程的你,想让你编个程序,在五一放假之前得到答案。


输入描述

给你一个正整数 n n n,请你计算出 n + 1 n + 1 n + 1 n + ⋯ n+\frac{1}{n+\frac{1}{n+\frac{1}{n+\cdots}}} n+n+n+n+111的值。

如:样例一

1

即求 1 + 1 1 + 1 1 + 1 1 + ⋯ 1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\cdots}}} 1+1+1+1+111的值。

数据范围:
1 ≤ n ≤ 1 0 8 1\leq n \leq 10^8 1n108


输出描述

为了避免根号不易打出的尴尬,老师决定允许小L用3个整数来表示答案。
如:样例一
经过计算机夜以继日的运算 ,得到 1 + 1 1 + 1 1 + 1 1 + ⋯ = 1 + 5 2 1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\cdots}}}=\frac{1+\sqrt5}{2} 1+1+1+1+111=21+5
我们用三个数字 a 、 b 、 c a、b、c abc来代表答案 a + b c \frac{a+\sqrt b}{c} ca+b

1 5 2

题目分析

一个可以无限递推下去的式子,一定具有某种神秘的规律。
小学三年级的数学老师教过我们,求谁设谁。

所以我们设 1 + 1 1 + 1 1 + 1 1 + ⋯ = x 1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\cdots}}}=x 1+1+1+1+111=x

现在 1 + 1 一 大 块 = x 1+\frac{1}{一大块}=x 1+1=x。那么这一大块等于什么呢?这一大块等于 1 + 1 1 + 1 1 + 1 1 + ⋯ 1+\frac{1}{1+\frac{1}{1+\frac{1}{1+\cdots}}} 1+1+1+1+111,还是 x x x
因此我们有 1 + 1 x = x 1+\frac{1}{x}=x 1+x1=x
解得 x = 1 + 5 2 x=\frac{1+\sqrt{5}}{2} x=21+5 x = 1 − 5 2 x=\frac{1-\sqrt{5}}{2} x=215 < 0 <0 <0,舍去)

1 1 1变成 n n n

n + 1 x = x n+\frac{1}{x} = x n+x1=x x = n + ( n 2 + 4 ) 2 x=\frac{n+\sqrt{(n^2+4)}}{2} x=2n+(n2+4) x = n − ( n 2 + 4 ) 2 x=\frac{n-\sqrt{(n^2+4)}}{2} x=2n(n2+4) < 0 <0 <0,舍去)


注意事项

  • Δ = n 2 + 4 > 0 \Delta=n^2+4>0 Δ=n2+4>0,一定有解
  • n − ( n 2 + 4 ) < 0 n-\sqrt{(n^2+4)}<0 n(n2+4) <0,一定有一解舍去
  • 分母为 2 2 2,可能需要约分
  • n n n的范围是 1 0 8 10^8 108 n 2 n^2 n2可能超出32位 i n t int int,某些编程语言注意用 l o n g   l o n g long\ long long long

AC代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
/*小水题一道*/
int main()
{
    ll n;
    cin >> n;
    ll a = n, b = n * n + 4, c = 2;
    if (a % 2 == 0 && b % 4 == 0)
        a /= 2, b /= 4, c /= 2;
    printf("%lld %lld %lld\n", a, b, c);
    return 0;
}

原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/116211565

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tisfy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值