【题解】Street Numbers [UVA138]
【题解】Street Numbers [UVA138]
传送门:\(\text{Street Numbers [UVA138]}\)
【题目描述】
求满足 \(n
【分析】
被抄代码+抄题解的xxs们【证明】。
【第一类佩尔方程】
形如 \(x^2-Dy^x=1\) \((D\in\mathbb{N^{*}}\text{且为非平方数})\) 。
设它的一组最小正整数解为 \(\left\{\begin{array}{c}x=x_0\\y=y_0\end{array}\right.,\) 则其第 \(n\) 个解满足:\(x_n+\sqrt{D}y_n=(x_0+\sqrt{D}y_0)^{n+1}\) 。
但 \(\sqrt{D}\) 这个东西并不友好,考虑转换成递推式:
\[\begin{aligned}x_n+\sqrt{D}y_n&=(x_0+\sqrt{D}y_0)(x_0+\sqrt{D}y_0)^n\\ &=(x_0+\sqrt{D}y_0)(x_{n-1}+\sqrt{D}y_{n-1})\\ &=(x_0x_{n-1}+Dy_0y_{n-1})+\sqrt{D}(x_0y_{n-1}+y_0x_{n-1})\end{aligned}\]即可得:\(\left\{\begin{array}{c}x_n=x_0x_{n-1}+Dy_0y_{n-1}\\y_n=x_0y_{n-1}+y_0x_{n-1}\end{array}\right.\) 。
【第二类佩尔方程】
形如 \(x^2-Dy^x=-1\) \((D\in\mathbb{N^{*}}\text{且为非平方数})\) 。
设它的一组最小正整数解为 \(\left\{\begin{array}{c}x=x_0\\y=y_0\end{array}\right.,\) 则其第 \(n\) 个解满足:\(x_n+\sqrt{D}y_n=(x_0+\sqrt{D}y_0)^{2n+1}\) 。
求递推式就把右边化成 \((x_0+\sqrt{D}y_0)^{2}(x_{n-1}+\sqrt{D}y_{n-1})\) 再展开,后续推导略。
【求解方法】
第一步是求最小正整数解。可以证明当 \(D\) 较小时 \(x_0,y_0\) 也较小,所以直接从小到大暴力枚举即可。算出 \(x_0,y_0\) 后即可递推得到其他解。
求解佩尔方程通常会以 高精递推/矩阵递推加速 的形式出现(虽然也没多少题)。
回到这题,先化简柿子:\(\frac{n(n-1)}{2}=\frac{m(m+1)}{2}-\frac{n(n+1)}{2}\Longrightarrow 2n^2=m^2+m\),显然和上面的方程没有丝毫关联,我们给两边同乘 \(4\) 然后配方:\(8n^2=4m^2+4m\Longrightarrow (2m+1)^{2}-8n^2=1\),忽略 \(n
用瞪眼法暴力枚举法可知其最小解为 \(\left\{\begin{array}{c}x_0=3\\y_0=1\end{array}\right.\) 。
答案为 \(\left\{\begin{array}{c}n_i=y_i\\m_i=\frac{x_i-1}{2}\end{array}\right.\) 。
(输出来后发现除了第 \(0\) 个解以外其他均满足 \(n
【Code】
#include
#include
#include
#define LL long long
#define Re register int
using namespace std;
const int N=103;
int D,x[N],y[N];
int main(){
x[0]=3,y[0]=1,D=8;
for(Re i=1;i<=10;++i)
x[i]=x[0]*x[i-1]+D*y[0]*y[i-1],
y[i]=x[0]*y[i-1]+y[0]*x[i-1];
for(Re i=1;i<=10;++i)//因为要满足n>1);
}