佩尔方程(超详细推导+例题讲解) 每日一遍,算法再见!

2023-05-16

这里写目录标题

  • 佩尔方程
    • 第一类佩尔方程
      • 第一类佩尔方程例题讲解
    • 第二类佩尔方程

佩尔方程

第一类佩尔方程

定义:形如 x 2 − d y 2 = 1 x^2 - dy^2 = 1 x2dy2=1(d>1,且d不是完全平方数)
要求第一类佩尔方程的解都是正整数解,也即 ( x , y ) , x > 0 , y > 0 (x,y),x>0,y>0 (x,y),x>0,y>0

为什么要求d不是完全平方数呢?
我们假设d是完全平方数
x 2 − d y 2 = 1 x^2 - dy^2 = 1 x2dy2=1等价于 ( x + d ∗ y ) ( x − d ∗ y ) = 1 (x+\sqrt d*y)(x-\sqrt d*y) = 1 (x+d y)(xd y)=1
所以它的解只有可能是(1,0),(-1,0),不是正整数解。

为什么d>1呢?因为如果d<=1,解也不会是正整数解,自己证明试试看。

显然佩尔方程 x 2 − d y 2 = 1 x^2 - dy^2 = 1 x2dy2=1有无数多个解,那么如何求最小的正整数解

我们把式子化简一下就变成了, x = 1 + d y 2 x=\sqrt{1+dy{2}} x=1+dy2 ,我们从y=1开始枚举y,如果 1 + d y 2 \sqrt{1+dy{2}} 1+dy2 整数的话,此时的x,y就是最小的正整数,也就得到了最小正整数解

那么如何得到所有解呢,也就是说我们最小正整数解是(x1,y1),那么如何得到(x2,y2),(x3,y3),…?

这里给出通解的迭代公式
x n = x n − 1 x 1 + d y n − 1 y 1 x_n = x_{n-1}x_1 + dy_{n-1}y_1 xn=xn1x1+dyn1y1
y n = x n − 1 y 1 + y n − 1 x 1 y_n = x_{n-1}y_1 + y_{n-1}x_1 yn=xn1y1+yn1x1
这个通解公式怎么推导的呢?我们要知其然,而知其所以然

推导:我们令(x1,y1),(x2,y2)为方程的两个特解
x 1 2 − d y 1 2 = 1 x_1^2-dy_1^2=1 x12dy12=1----①
x 2 2 − d y 2 2 = 1 x_2^2-dy_2^2=1 x22dy22=1----②
两式想乘得到
( x 1 2 − d y 1 2 ) ∗ ( x 2 2 − d y 2 2 ) = 1 (x_1^2-dy_1^2)*(x_2^2-dy_2^2)=1 (x12dy12)(x22dy22)=1
展开得到
x 1 2 x 2 2 − d x 1 2 y 2 2 − d y 1 2 x 2 2 + d 2 y 1 2 y 2 2 = 1 x_1^2x_2^2-dx_1^2y_2^2-dy_1^2x_2^2+d^2y_1^2y_2^2=1 x12x22dx12y22dy12x22+d2y12y22=1
-> [ x 1 2 x 2 2 + d 2 y 1 2 y 2 2 ] − d [ d x 1 2 y 2 2 + y 1 2 x 2 2 ] = 1 [x_1^2x_2^2+d^2y_1^2y_2^2]-d[dx_1^2y_2^2+y_1^2x_2^2]=1 [x12x22+d2y12y22]d[dx12y22+y12x22]=1
-> [ x 1 2 x 2 2 + d 2 y 1 2 y 2 2 + 2 d x 1 x 2 y 1 y 2 ] − d [ d x 1 2 y 2 2 + y 1 2 x 2 2 + 2 x 1 x 2 y 1 y 2 ] = 1 [x_1^2x_2^2+d^2y_1^2y_2^2+2dx_1x_2y_1y_2]-d[dx_1^2y_2^2+y_1^2x_2^2+2x_1x_2y_1y_2]=1 [x12x22+d2y12y22+2dx1x2y1y2]d[dx12y22+y12x22+2x1x2y1y2]=1
-> ( x 1 x 2 − d y 1 y 2 ) 2 − d ( x 1 y 2 + x 2 y 1 ) 2 = 1 (x_1x_2-dy_1y_2)^2-d(x_1y_2+x_2y_1)^2=1 (x1x2dy1y2)2d(x1y2+x2y1)2=1
所以 x 3 = x 2 x 1 + d y 2 y 1 , y 3 = x 2 y 1 + x 1 y 2 x_3=x_2x_1+dy_2y_1,y_3=x_2y_1+x_1y_2 x3=x2x1+dy2y1,y3=x2y1+x1y2
我们把下标换为n就得到
x n = x n − 1 x 1 + d y n − 1 y 1 x_n = x_{n-1}x_1 + dy_{n-1}y_1 xn=xn1x1+dyn1y1
y n = x n − 1 y 1 + y n − 1 x 1 y_n = x_{n-1}y_1 + y_{n-1}x_1 yn=xn1y1+yn1x1

这样的话我们只要知道第一个特解 ( x 1 , y 1 ) (x1,y1) (x1,y1),和第n-1个特解 ( x n − 1 , y n − 1 ) (x_{n-1},y_{n-1}) (xn1,yn1),就能够求出第n个解,但是很明现如果暴力求第n个解的话,时间复杂度是O(n),如果n很大的话就会超时,我们这时候可以用矩阵快速幂logn的复杂度来就快速求取,第n个解。

步骤:

step1:先通过暴力找到最小正整数解,也就是第一组解(x1,y1),也有一种快速找最小正整数解的方法,叫做连分数法,感兴趣的小伙伴自行百度。

代码:

#include<bits/stdc++.h>
typedef long long ll;
void solve(ll &x,ll &y,ll d)
{
     y=1;
     for(y=1;;y++)
     {
      tempc = ceil(sqrt(d*y*y+1));
      tempf = floor(sqrt(d*y*y+1));
     if(tempc==tempf) break;//只有整数的ceil和floor相同,也就是向上取整和向下取整
     }
	 x=tempc;
	 return ; 
}

step2:根据迭代公式找到所有我们要找的解,也就是
x n = x n − 1 x 1 + d y n − 1 y 1 x_n = x_{n-1}x_1 + dy_{n-1}y_1 xn=xn1x1+dyn1y1
y n = x n − 1 y 1 + y n − 1 x 1 y_n = x_{n-1}y_1 + y_{n-1}x_1 yn=xn1y1+yn1x1

方法1:暴力迭代法
代码:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
void solve(ll &x,ll &y,ll d)
{
     ll tempc,tempf; 
     for(y=1;;y++)
     {
      tempc = ceil(sqrt(d*y*y+1));
      tempf = floor(sqrt(d*y*y+1));
     if(tempc==tempf) break;
     }
	 x=tempc;
	 return ; 
}
int main()
{
	ll x1,y1,d;
	cin>>d;//输入佩恩方程的d 
	solve(x1,y1,d);
	ll xxi=x1,yyi=y1;
	ll xi,yi;
	int n; 
	for(int i=2;i<=n;i++)//这里可以用于暴力求第n个解输入n就行 
	{
	   xi = xxi*x1+d*yyi*y1;
	   yi = xxi*y1+yyi*x1;
	   xxi = xi;
	   yyi = yi; 
	}
	cout<<xi<<' '<<yi<<endl;
	return 0;
}

方法2:矩阵快速幂迭代法
如果我们需要用矩阵快速幂来求的话,我们就需要把通解转化为矩阵的表达形式。

[ x n y n ] \begin{bmatrix} x_n\\ y_n \end{bmatrix} [xnyn]= [ x 1 d y 1 y 1 x 1 ] n − 1 \begin{bmatrix} x_1&dy_1 \\ y_1&x_1 \end{bmatrix}^{n-1} [x1y1dy1x1]n1 [ x 1 y 1 ] \begin{bmatrix} x_1\\ y_1 \end{bmatrix} [x1y1]
这样我们就可以用矩阵快速幂来求取方程的第n个解,时间复杂度是O(logn),矩阵快速幂就类似于普通的快速幂,只不过我们的底数是一个矩阵,而不是一个常数,如果不了解矩阵快速幂的,请出门右转(矩阵快速幂)。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll Maxn=10;
/*矩阵乘法*/ 
void Matrix_ksm(ll a[][Maxn],ll b[][Maxn],ll size)
{

	ll temp[Maxn][Maxn]={0};//注意一定要初始化为0 
	for(ll i=1;i<=size;i++)
	 for(ll j=1;j<=size;j++)
	  for(ll k=1;k<=size;k++)
	  {
	  	  temp[i][j]+=a[i][k]*b[k][j];
	  }
	  for(ll i=1;i<=size;i++)
	   for(ll j=1;j<=size;j++)
	   a[i][j]=temp[i][j];
	   
	  return ;
}
void solve(ll &x,ll &y,ll d)
{
     ll tempc,tempf; 
     for(y=1;;y++)
     {
      tempc = ceil(sqrt(d*y*y+1));
      tempf = floor(sqrt(d*y*y+1));
     if(tempc==tempf) break;
     }
	 x=tempc;
	 return ; 
}
int main()
{
	ll x1,y1;
	ll n,d;
	printf("请输入d:\n");
	cin>>d;
	solve(x1,y1,d);//我们先求第一个解,也就是最小正整数解 
//	cout<<x1<<' '<<y1<<'\n';
	
	printf("请输入要求的第n个矩阵,n=:\n");
	cin>>n;
	ll ans[Maxn][Maxn]={0};
    for(ll i=1;i<=Maxn;i++) ans[i][i]=1;
    ll dishu[Maxn][Maxn];
    dishu[1][1]=x1;
    dishu[1][2]=d*y1;
    dishu[2][1]=y1;
    dishu[2][2]=x1;
    ll zhishu=n-1;
    /*矩阵快速幂*/ 
    while(zhishu)
    {
    	if(zhishu&1)
    	{
    		zhishu--;
    		Matrix_ksm(ans,dishu,2);
		}
		else 
		{
			zhishu>>=1;
			Matrix_ksm(dishu,dishu,2);
		}
	}
    ll xn = ans[1][1]*x1+ans[1][2]*y1;
	ll yn = ans[2][1]*x1+ans[2][2]*y1;
	cout<<xn<<' '<<yn<<endl;
	return 0; 
}

第一类佩尔方程例题讲解

有句熟话说得好“光说不练假把式”,下面我们就来分析几道例题

Street Numbers
题目大意:找出n,m使得 1 + 2 + 3 + . . . . + ( n − 1 ) = ( n + 1 ) + ( n + 2 ) . . . . + m 1+2+3+....+(n-1)=(n+1)+(n+2)....+m 1+2+3+....+(n1)=(n+1)+(n+2)....+m,输出前十个解(n,m)。每个数字占是个字符,向右对齐,且每一排升序排列。

分析:我们不难发现,等式的左右都是一个等差数列,那么我们处理一下就可以得到这样一个等式, ( 2 m + 1 ) 2 − 8 n 2 = 1 (2m+1)^2-8n^2=1 (2m+1)28n2=1,我们令 x = ( 2 m + 1 ) , y = n , d = 8 x=(2m+1),y=n,d=8 x=(2m+1),y=n,d=8,这不就是一个裸的佩尔方程吗?我们只需要找到x,y就能找到m,n。

AC代码:

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
typedef long long ll;
/*找佩尔方程的第一个解,也就是正整数解*/
void solve(ll &x,ll &y,ll d)
{
     ll tempc,tempf; 
     for(y=1;;y++)
     {
      tempc = ceil(sqrt(d*y*y+1));
      tempf = floor(sqrt(d*y*y+1));
     if(tempc==tempf) break;
     }
	 x=tempc;
	 return ; 
}
int main()
{
	ll x1,y1,d=8;
	solve(x1,y1,d);
	ll xxi=x1,yyi=y1;
	ll xi,yi;
	/*通过迭代公式依次找到前十个解,注意这道题答案,第一个解不算在里面
	,所以前十个解是从第2到第11个解*/
	for(int i=2;i<=11;i++)//这里可以用于暴力求第n个解输入n就行 
	{
	   xi = xxi*x1+d*yyi*y1;
	   yi = xxi*y1+yyi*x1;
	   xxi = xi;
	   yyi = yi; 
	   printf("%10lld%10lld\n",yyi,(xxi-1)/2);/*注意题目要求每一个数字占
	   十个字符,每一排升序排列,所以我们先输出n,
	   再输出m,因为(n<m),*/
	}
	return 0;
} 

我们再来一道板子题No more tricks, Mr Nanguo

题目大意:就是一开始乐队有n个人,可以站成一个边长为x的正方形,现在走了一个人,把剩余的n-1个人分成d(这个d题目会给出)个边长为y的正方形站列,显然n有无穷多个解,对应的x,y也有无穷多组解,现在让你求第k(k题目会给出)小的正整数解x

这道题自己尝试着写一下,我就不写题解了,不过提醒一点,运算的时候注意取模,不然数据太大long long都可能超,由于k会比较大,所以不建议用暴力迭代法会超时,用矩阵快速幂来解决

AC代码:

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
typedef long long ll;
const int mod=8191;
const ll Maxn=10;
/*矩阵乘法*/ 
void Matrix_ksm(ll a[][Maxn],ll b[][Maxn],ll size)
{

	ll temp[Maxn][Maxn]={0};//注意一定要初始化为0 
	for(ll i=1;i<=size;i++)
	 for(ll j=1;j<=size;j++)
	  for(ll k=1;k<=size;k++)
	  {
	  	/*在矩阵运算的时候,我们把每一个可能超范围的地方都取模*/
	  	  temp[i][j]=(temp[i][j]%mod+a[i][k]%mod*b[k][j]%mod)%mod;
	  }
	  for(ll i=1;i<=size;i++)
	   for(ll j=1;j<=size;j++)
	   a[i][j]=temp[i][j];
	   
	  return ;
}
void solve(ll &x,ll &y,ll d)
{
     ll tempc,tempf; 
     for(y=1;;y++)
     {
      tempc = ceil(sqrt(d*y*y+1));
      tempf = floor(sqrt(d*y*y+1));
     if(tempc==tempf) break;
     }
	 x=tempc;
	 return ; 
}
int main()
{
	ll x1,y1;
	ll n,d;
	while(scanf("%lld %lld",&d,&n)!=EOF)
	{
	if(d<=1||ceil(sqrt(d))==floor(sqrt(d)))
	{
		cout<<"No answers can meet such conditions"<<'\n';
		continue;
	} 
	solve(x1,y1,d);//我们先求第一个解,也就是最小正整数解 
	ll ans[Maxn][Maxn]={0};
    for(ll i=1;i<=Maxn;i++) ans[i][i]=1;
    ll dishu[Maxn][Maxn];
    dishu[1][1]=x1;
    dishu[1][2]=d*y1;
    dishu[2][1]=y1;
    dishu[2][2]=x1;
    ll zhishu=n-1;
    /*矩阵快速幂*/ 
    while(zhishu)
    {
    	if(zhishu&1)
    	{
    		zhishu--;
    		Matrix_ksm(ans,dishu,2);
		}
		else 
		{
			zhishu>>=1;
			Matrix_ksm(dishu,dishu,2);
		}
	}
    ll xn = ans[1][1]%mod*x1%mod+ans[1][2]%mod*y1%mod;
	ll yn = ans[2][1]%mod*x1%mod+ans[2][2]%mod*y1%mod;
	cout<<xn%mod<<'\n';
     }
	return 0; 
}

第二类佩尔方程

定义:形如 x 2 − d y 2 = k x^2 - dy^2 = k x2dy2=k的方程叫做第二类佩恩方程
第二类佩尔方程可以看成是第一类佩尔的拓展,也相对复杂一点

解第二类佩恩方程,需要用到第一类方程的解。

推导:
我们假设 x 2 − d y 2 = k − − − − − ① x^2 - dy^2 = k-----① x2dy2=k的一个特解为 p , q p,q pq
x 2 − d y 2 = 1 − − − − − ② x^2 - dy^2 = 1-----② x2dy2=1的正整数解为 x 1 , y 1 x1,y1 x1,y1,①×②式就可以得到下面式子。
-> ( p 2 − d q 2 ) ∗ ( x 1 2 − d y 1 2 ) = k (p^2-dq^2)*(x_1^2-dy_1^2)=k (p2dq2)(x12dy12)=k
-> ( p x 1 ± d q y 1 ) 2 − d ( p y 1 ± q x 1 ) 2 = k (px_1\pm dqy_1)^2-d(py_1\pm qx_1)^2 =k (px1±dqy1)2d(py1±qx1)2=k
所以通解为, x = p x 1 ± d q y 1 x=px_1\pm dqy_1 x=px1±dqy1, y = p y 1 ± q x 1 y=py_1\pm qx_1 y=py1±qx1
我们假设②式中d=2,那么 x 2 − 2 y 2 = 1 x^2-2y^2=1 x22y2=1,解得最小正整数解是 x 1 = 3 , y 1 = 2 x_1=3,y_1=2 x1=3,y1=2,那么①式的解就是 x n = 3 x n − 1 ± 4 y n − 1 x_n=3x_{n-1}\pm 4y_{n-1} xn=3xn1±4yn1, y n = 2 x n − 1 ± 3 y n − 1 y_n=2x_{n-1}\pm 3y_{n-1} yn=2xn1±3yn1

遇到第二类佩尔方程也不用害怕,只需要和第一类佩尔方程联系起来求出通解即可。我们更具第二类佩尔方程的通解,
x = p x 1 + d q y 1 x=px_1+dqy_1 x=px1+dqy1, y = p y 1 + q x 1 y=py_1+ qx_1 y=py1+qx1,可以转化为矩阵乘法的形式
[ x n y n ] \begin{bmatrix} x_n\\ y_n \end{bmatrix} [xnyn]= [ p d q q p ] n − 1 \begin{bmatrix} p &dq \\ q&p \end{bmatrix}^{n-1} [pqdqp]n1 [ x 1 y 1 ] \begin{bmatrix} x_{1}\\ y_{1} \end{bmatrix} [x1y1],这样就方便用矩阵快速幂求第k个解

请关注我看更多数论分支知识体系讲解,也别忘点个赞额!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

佩尔方程(超详细推导+例题讲解) 每日一遍,算法再见! 的相关文章

  • C++查找指定目录下的特定后缀文件并按照创建时间排序

    在一个项目中 xff0c 遇到了这个需求 于是windows 43 vs平台上实现了这个功能Demo 测试完毕后移植到了具体的项目中 span class token macro property span class token dire
  • Ubuntu下Qt程序生成Core文件便于调试

    需要在运行时生成core dump文件 xff0c 以排查出错的代码行 首先在pro结尾里加入 xff1a QMAKE CC 43 61 g QMAKE CXX 43 61 g QMAKE LINK 43 61 g 在终端输入 ulimit
  • linux查看进程所有子进程和线程

    线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念 当一个程序内有多个线程被叉分出用以执行多个流时 xff0c 这些线程就会在它们之间共享特定的资源 xff08 如 xff0c 内存地址空间 打开的文件 xff09 xff0c
  • 一款二进制文件查看器

    由于使用的是Notepad 43 43 64位版本 xff0c 在网上找了很多二进制查看插件HexEditor dll要么是32位不兼容 xff0c 要么是出现除零的错误 xff08 以前找到过一次支持Notepad 43 43 64位版本
  • YOLO目标检测

    一 背景 基于深度学习技术的视觉目标检测近年去的长足发展 但仍然有许多方面问题需要优化 二 YOLO算法的特点 YOLO作为一种性能优异的通用目标检测系统 xff0c 为了保证检测的效率 xff0c 提出one stage的思想 xff0c
  • (Qt中添加编译选项)QT在交叉编译时出现parameter passing for argument of type ‘std::_Rb_tree xxxxx changed in GCC 7.1

    QT版本都是5 1x 先是在Ubuntu机器上写的代码 xff0c GCC版本为5 4 xff0c 代码编译无 任何警告 后来移植到开发板 xff08 GCC版本为7 1 xff09 进行编译时 xff0c 提示这种警告 发生在代码中对st
  • C++按行读取文本并解析

    项目中需要按行读取文本文件 xff0c 并对每一行内容进行解析 每一行都是固定的字段数 xff0c 字段之间用空格隔开 span class token macro property span class token directive k
  • error C2447: “{”: 缺少函数标题(是否是老式的形式表?)

    error C2447 缺少函数标题 是否是老式的形式表 网上有人说 这个BUG是因为在win7上使用了 LF 的格式编码导致的 使用Notepad 43 43 修改成 BOM UTF8 和 windows 的 CR LF 格式一切正常 确
  • Visual Studio 2017 代码自动对齐

    点 编辑 高级 设置选定内容的格式 或者按Ctrl 43 K 然后再按Ctrl 43 F 就好了 你可以在常用快捷键自定义 窗口中进行查看 1 进入工具 选项 对话框 2 选择 环境 键盘 3 在 显示命令包含 下面的对话框中输入 对齐 关
  • CSDN 排版之颜色、字体、字号及背景色

    颜色 xff1a span class token operator lt span font color span class token operator 61 span blue span class token operator g
  • 使用QTCreator编程时,如何利用dmp文件定位程序奔溃

    写这篇文章之前 xff0c 看了一些其他人的博客 xff0c 但不是很详细 xff0c 缺这少那的 xff0c 好多都是复制粘贴别人的东西 自己动手弄了弄 xff0c 可以使用 xff0c 就记下来备忘与分享 前言 开发环境说明 编程IDE
  • Pytorch中transforms.RandomResizedCrop使用说明

    加载数据 训练集数据扩充 数据增强 和归一化 数据扩充 数据增强 的意义在于通过人为的随机范围裁剪 缩放 旋转等操作 增大训练集中的数据多样性 全面性 进而提高模型的泛化能力 训练集数据扩充和归一化 在验证集上仅需要归一化 data tra
  • C++中调用Python的办法

    1 背景 一直采用C 43 43 作为主语言开发 xff0c 最近遇到一个项目需要解析PDF文件中的文本内容 xff0c 直接采用C 43 43 来做显得不是很方便 xff0c 但用python来做就显得很简单了 难点在于如何C 43 43
  • Qt Creator远程调试嵌入式ARM开发板

    1 环境 Win10 64位系统上通过Virtual Box安装了一个Ubuntu虚拟机 ubuntu的版本 xff1a Linux kernel 4 15 0 142 generic 146 16 04 1 Ubuntu SMP Ubun
  • 套接字(描述符)读取指定的字节数

    检测fd句柄是否可读 xff0c ms毫秒超时 参数 xff1a df in 检测的句柄 ms in 超时 xff0c 毫秒 返回 xff1a 1 可读 xff0c 或者已经断开 0 超时 xff0c 仍然不可读 1 错误 int IsRe
  • 4.4线索二叉树遍历

    1 中序线索二叉树遍历 找到第一个中序遍历的结点 ThreadNode span class token operator span span class token function Firstnode span span class t
  • 自动根据本机字节序 将小端字节序的报文(字符数组)转为整数

    1 xff0c 判断本机的字节序 xff08 大端优先 小端优先 xff09 判断当前PC为大端还是小端字节序 64 返回值 xff1a 1 大端 xff1b 0 小端 int JudgeEndianOfPC int num 61 1 if
  • 智能指针的使用

    智能指针在C 43 43 11版本之后提供 xff0c 包含在头文件 lt memory gt 中 xff0c shared ptr unique ptr weak ptr 1 xff0c shared ptr的使用 shared ptr使
  • 图像检索系列——利用深度学习实现以图搜图

    转载自 xff1a 图像检索系列 利用深度学习实现以图搜图 知乎 前言 在上一篇文章 图像检索系列 利用 Python 检测图像相似度 中 xff0c 我们介绍了一个在图像检索领域非常常用的算法 感知哈希算法 这是一个很简单且快速的算法 x
  • Windows下select模型(以及EAGAIN、EWOULDBLOCK、EINTR)

    在这里记录一下 xff0c 以前都是新项目用到了就从旧项目中拷贝 自从将博客当作记事本 xff0c 发现自己多了一个好习惯 Windows下select模型 程序员攻略 CSDN博客 套接字IO超时设置和使用select实现超时管理 wj

随机推荐

  • RANSAC算法理解

    RANSAC是 RANdom SAmple Consensus xff08 随机抽样一致 xff09 的缩写 它可以从一组包含 局外点 的观测数据集中 xff0c 通过迭代方式估计数学模型的参数 它是一种不确定的算法 它有一定的概率得出一个
  • C++ 环形缓冲区(队列)简单实现

    1 说明 在实际工作中 xff0c 如果数据流量过大 xff0c 可以先把数据接收到数据缓冲区中 xff0c 处理之后再取出 我们定义的包协议可以采用定长包 xff0c 可以采用不定长度的包 xff0c 环形缓冲区都能处理 2 使用场景 2
  • Visual Studio Code (vscode) 配置 C / C++ 环境

    Visual Studio Code vscode 配置 C C 43 43 环境 步平凡 博客园 在电脑安装软件管控严格的情况下 xff0c 想装VS装不了 xff0c 就装轻量版的VSCode了 以上写得很好 xff0c 照做即可 本人
  • c++实现basename

    window API居然不包含Linux中很好用的basename函数 xff0c 实现了一下 xff0c 留个记录 xff0c 省得日后重复写 std string m basename std string fullPath size
  • tortoiseGit教程

    0 前言 TortoiseGit其实是一款开源的git的版本控制系统 xff0c 也叫海龟git TortoiseGit提供了人性化的图形化界面 xff0c 不用像Git一样输入许多语句 xff0c 像git init git add gi
  • 用STL库创建线程

    测试了3种方式 xff1a 1 xff1a 子线程不带返回值 2 xff1a 子线程带返回值 3 xff1a 子线程带引用类型参数 使用join方式 xff0c 让父线程等待子线程运行结束 TestTemp cpp 定义控制台应用程序的入口
  • 4.5树的存储

    双亲表示法 xff0c 孩子表示法 xff0c 孩子兄弟表示法 1 双亲表示法 查找双亲简单 空数据导致遍历更慢 xff0c 查指定节点的孩子只能遍历 span class token keyword typedef span ElemTy
  • Windows下MySQL数据库的安装、配置及C++使用案例

    1 安装及配置 Windows判断本地是否安装mysql以及mysql安装过程 企鹅要去银河思考人生 xff01 xff01 xff01 的博客 CSDN博客 windows查看是否安装mysql 注意按照文中提示 xff0c 配置好环境变
  • C++获取系统毫秒级时间(自1970年1月1日至今的毫秒数)

    跟系统时间相关的 ifdef WIN32 include lt time h gt include lt windows h gt else include lt sys time h gt endif unsigned long long
  • Window 10下SQL Server的安装配置以及C++使用案例

    1 SQL Server2008的安装与配置 参照下面这篇博客实现即可 里面提供了安装包下载方式 xff08 百度网盘有点慢 xff09 安装及配置步骤 SQLServer安装教程 xff08 史上最详细版本 xff09 杨林伟的博客 CS
  • 基于OpenCV实现的多角度、多目标模板匹配项目实战案例

    1 说明 本案例采用NCC的匹配 金字塔 为了加速 思想 基于OpenCV实现的多角度 多目标模板匹配 不支持尺度不变 若研究旋转 尺度不变性的匹配 请参考本人的OpenCV专栏内的 nbsp OpenCV实现多角度多尺度模板匹配 基于形状
  • 程序日志模块的两种模式

    程序员都知道程序的运行日志在不少时候都非常有用 xff0c 利于排查 理清逻辑 一般而言 xff0c 日志都按天生成 xff0c 并且具备自动清理多少天以前的旧日志 xff0c 避免无限增长占用磁盘 下图展示了2种日志模式 模式一 1 xf
  • C++开发面试常考

    C 43 43 后台开发面试常考 pudn com
  • 如何在微软官网上下载旧版本的visual studio

    想在微软官网下载旧版本的VS 太长不想看的可以直接戳网址进入最终的界面 xff1a Visual Studio 较旧的下载 2019 2017 2015 和以前的版本想从官网首页一步一步进入到最终下载界面的可以看下面详细步骤 xff1a 1
  • 基于OpenCV实现的RANSAC随机抽样一致性直线拟合

    概要 本文介绍基于ransac随机抽样一致性随机抽样一致性的直线拟合方法 涵盖一下的内容 ransac的算法思想 ransac的算法步骤 如何调整ransac算法迭代的次数 基于opencv编码实现 ransac算法流程 RANSACRAN
  • 基于OpenCV(C++)实现的RANSAC随机抽样一致性的曲线拟合(二次)

    nbsp 0 前言 nbsp nbsp 前不久整理了RANSAC直线拟合的文章 基于OpenCV实现的RANSAC随机抽样一致性直线拟合 thequitesunshine007的博客 CSDN博客 这篇文章与其类似 只是从拟合直线变为拟合曲
  • 最小二乘least-squares拟合曲线(三次或多次)

    1 说明 基于最小least squares去拟合出多次曲线 考虑到了所有的样本点 因此这种方法对噪声敏感 尤其是遇到较为突兀明显的噪声时 曲线的形状易受干扰 2 代码 代码细节仔细读基本都能读懂 或者查一下也不是什么大问题 include
  • 4.6树和森林的遍历

    一 树的遍历 1 先根遍历 对应二叉树先序遍历 span class token keyword void span span class token function PreOrder span span class token punc
  • 扩展欧几里得算法(简单易懂,详细分析)

    扩展欧几里得算法 扩展欧几里得算法证明 43 应用 61 61 欧几里得算法 61 61 61 61 扩展欧几里得算法 61 61 应用1 xff1a 求一元二次线性方程的整数解应用二 xff1a 求ax 61 c mod p 应用三 xf
  • 佩尔方程(超详细推导+例题讲解) 每日一遍,算法再见!

    这里写目录标题 佩尔方程第一类佩尔方程第一类佩尔方程例题讲解 第二类佩尔方程 佩尔方程 第一类佩尔方程 定义 xff1a 形如 x 2 d