当前位置: 首页 > news >正文

数学知识(二)

一、裴蜀定理

对于任意整数a,b,一定存在非零整数x,y,使得 ax + by = gcd(a,b)

#include<iostream>
#include<algorithm>using namespace std;int exgcd(int a,int b,int &x,int &y)
{if(!b){x = 1,y = 0;return a;}int d = exgcd(b,a % b,y,x);y -= a / b * x;return d;
}int main()
{int n;scanf("%d",&n);while(n --){int a,b,x,y;scanf("%d%d",&a,&b);exgcd (a,b,x,y);printf("%d%d\n",x,y);}return 0;
}

二、高斯消元

步骤:枚举每一列,取列c

  • 1、找到绝对值最大的一行
  • 2、将该行换到最上面
  • 3、将该行第一个数变为1(与该行其它数的比值不改变)
  • 4、将下面所有行的第c列消为零
#include<iostream>
#include<cmath>
#include<algorithm>using namespace std;const int N = 110;
const double eps = 1e-6;int n;
double a[N][N];int gauss()
{int c,r;for(c = 0,r = 0; c < n;c ++){//找到绝对值最大的一行int t = r;for(int i = r; i < n; i ++)if(fabs(a[i][c]) > fabs(a[t][c])) t = i;if(fabs(a[t][c]) < eps) continue;//将该行换到最上方for(int i = c;i <= n;i ++) swap(a[t][i],a[r][i]);//将该行第一个数变为1for(int i = n;i >= c; i --) a[r][i] /= a[r][c];//将下面所有行消为0for(int i = r + 1;i < n;i ++)if(fabs(a[i][c]) > eps)for(int j = n;j >= c;j --)a[i][j] -= a[r][j] * a[i][c];r ++;}if(r < n){for(int i = r;i < n;i ++)if(fabs(a[i][n]) > eps)return 2; //无解return 1; //有无穷多组解}for(int i = n - 1;i >= 0;i --)for(int j = i + 1;j < n;j ++)a[i][n] -= a[i][j] * a[j][n];return 0; //存在唯一的解
}

三、求组合数

#include<iostream>
#include<cmath>
#include<algorithm>using namespace std;const int N = 2010,mod = 1e9 + 7;
int c[N][N];//初始化
void init()
{for(int i = 0;i < N;i ++)for(int j = 0;j <= i;j ++){if(!j) c[i][j] = 1;else c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;}}
int main()
{init();int n;scanf("%d",&n);while(n --){int a,b;scanf("%d%d",&a,&b);printf("%d\n",c[a][b]);}return 0;
}

 第二种方法:

#include<iostream>
#include<algorithm>
#include<cmath>using namespace std;typedef long long LL;
const int N = 100010,mod = 1e9 + 7;int fact[N],infact[N];int qmi(int a,int k,int p)
{int res = 1;while(k){if(k & 1) res = (LL) res *a % p;a = (LL)a * a % p;k >>= 1;}return res;
}int main()
{fact[0] = infact[0] = 1;for(int i = 1;i < N;i ++){fact[i] = (LL)fact[i - 1] * i % mod;infact[i] = (LL)infact[i - 1] * qmi(i,mod - 2,mod) % mod;}int n;scanf("%d",&n);while(n --){int a,b;scanf("%d%d",&a,&b);printf("%d\n",(LL)fact[a] * infact[b] % mod * infact[a - b] % mod);}return 0;
}
http://www.lryc.cn/news/109109.html

相关文章:

  • Java实现数据库表中的七种连接【Mysql】
  • 452. 用最少数量的箭引爆气球
  • HTML <rp> 标签
  • 常见的设计模式(超详细)
  • Excel 超牛的格式调整汇总——你还在担心你做出来的表不好看吗
  • hyperf 十二、自动化测试
  • dblink简单使用
  • Typescript 第十一章 与JavaScript互操作(外参变量声明,外参类型声明,外参模块声明)
  • 从0到1框架搭建,Python+Pytest+Allure+Git+Jenkins接口自动化框架(超细整理)
  • 在windows配置redis的一些错误及解决方案
  • 真机搭建中小网络
  • Linux:shell脚本:基础使用(1)
  • carla中lka实现(一)
  • 常见的数据结构(顺序表、顺序表、链表、栈、队列、二叉树)
  • (12)理解委托,反射,Type,EvenInfo,插件, 组合枚举,BindingFlags,扩展方法及重载,XML认识
  • 软件建设方案技术方案实施方案密码评测方案等保测评方案人员培训方案项目建设与运行管理项目招标方案模板目录
  • pytorch中torch.einsum函数的详细计算过程图解
  • 【iOS】App仿写--天气预报
  • 快速远程桌面控制公司电脑远程办公
  • 亚信科技AntDB数据库专家出席数据库标准研讨会并参与研讨
  • 【我们一起60天准备考研算法面试(大全)-第三十四天 34/60】【前缀和】【北邮】
  • 【数据分析】numpy (二)
  • Vue3小案例—v-model 双向数据绑定实现动态列表增加和删除
  • MySQL 重置root 密码
  • OpenCV图像处理技巧之空间滤波
  • Java超级玛丽小游戏制作过程讲解 第一天 创建窗口
  • 【POP3/IMAP/SMTP】QQ邮箱设置
  • 云计算——常见集群策略
  • c语言locale.h简介
  • C++运算符重载详解(赋值、流插入流提取、前置后置++、取地址)