P2673 学习笔记

省流:数学推式子(实在不行你叫他数学退火也行)

题目传送门

总结一下:

  • 代码难度:红;

  • 推式子难度:蓝

直接开推。

我们要求的是

\[\lim_{k \to +\infty } \sum_{i=1}^{k} F_i \times 10^{k-i} \]

的值。

我们把 \(+\infty\) 代进去:

\[\sum_{i=1}^{+\infty} F_i \times 10^{+\infty-i} \]

我们在这个式子前面加上 0.,变成小数,式子就变成了

\[\sum_{i=1}^{+\infty} F_i \times 10^{-i} \]

注意到斐波那契数列的通项公式

\[F_i=\frac1{\sqrt5}[(\frac{1+\sqrt5}2)^i-(\frac{1-\sqrt5}2)^i] \]

代入得

\[\sum_{i=1}^{+\infty} \frac1{\sqrt5}[(\frac{1+\sqrt5}2)^i-(\frac{1-\sqrt5}2)^i] \times (\frac{1}{10})^i \]

\((\dfrac{1}{10})^i\) 乘进去:

\[\sum_{i=1}^{+\infty} \frac1{\sqrt5}[(\frac{1+\sqrt5}{20})^i-(\frac{1-\sqrt5}{20})^i] \]

我们先不看 \(\dfrac{1}{\sqrt5}\),于是原式就变成了等比数列求和公式。

我们直接一顿错位相减,最后我们要求的式子变成了

\[\frac1{\sqrt5} \times \frac{10\sqrt5}{89}=\frac{10}{89} \]

建议打上标签:循环结构。

那么代码就很好写了 qwq。

code
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <iterator>
#include <map>
#include <unordered_map>
#include <queue>
#include <string>
#include <cstring>
#include <set>
#include <bitset>
#include <unordered_set>
#include <vector>
#include <deque>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <list>
#include <array>
#include <iterator>
#include <cmath>
#include <new>
#include <random>
#include <cfloat>
#include <cstdlib>
#include <climits>
#include <numeric>
#include <complex>
#include <ctime>
#include <chrono>
#include <thread>
#include <mutex>
#include <future>
#include <exception>
#include <stdexcept>
#include <cstdint>
#include <cassert>
#include <stack>
#include <cctype>
#define DEBUG
#define Ofile(s) freopen(s".in", "r", stdin), freopen (s".out", "w", stdout)
#define Cfile(s) fclose(stdin), fclose(stdout)
#define fast ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;

using ll = long long;
using ull = unsigned long long;
using lb = long double;

constexpr int mod = 998244353;

int n, m;

int main() {
	fast;
	freopen("std.in", "r", stdin);
	freopen("std.out", "w", stdout);
	cin >> n >> m;
	int ans = 10;
	for (int i = 1; i <= m; i++){
		if (i >= n)
			cout << ans * 10 / 89;
		ans = ans * 10 % 89;
	}
	return 0;
}
posted @ 2026-02-06 22:32  constexpr_ll  阅读(1)  评论(0)    收藏  举报