$O(n)$递推求逆元

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int inv[];
int main(){
int n,p;
scanf("%d%d",&n,&p);
inv[]=;
printf("1\n");
for(int i=;i<=n;i++){
inv[i]=(ll)(p-p/i)*inv[p%i]%p;
printf("%d\n",inv[i]);
}
return ;
}

exgcd求逆元

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

模数为质数时,用费马小定理求逆元

 #include<cstdio>
typedef long long ll;
const int mod=1e9+;
ll ksm(ll x,ll y){
ll ret=;
while(y){
if(y&) ret=ret*x%mod;
x=x*x%mod;
y>>=;
}
return ret;
}
int main(){
ll a;
scanf("%lld",&a);
printf("%lld",ksm(a,mod-));
return ;
}

$O(n)$求$1!$到$N!$的逆元

$1/i!=(i+1)/(i+1)!$

实现时先求出$f[n]$再反向递推

 f[i]=(ll)(i+)*f[i+]%mod

中国剩余定理

贴一篇别人的:http://www.cnblogs.com/MashiroSky/p/5918158.html

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int N,A[],B[];
void Exgcd(ll a,ll b,ll &x,ll &y){
if(!b){
x=;
y=;
return;
}
Exgcd(b,a%b,x,y);
ll tmp=x;
x=y;
y=tmp-a/b*y;
}
ll Chinese_Remainder_Theorem(){
ll M=;
for(int i=;i<=N;i++) M*=A[i];
ll ret=,x,y;
for(int i=;i<=N;i++){
ll tmp=M/A[i];
Exgcd(tmp,A[i],x,y);
ret=(ret+tmp*x*B[i])%M;
}
return (ret+M)%M;
}
int main(){
return ;
}

Lucas定理

$C(N,M)\% P = C(N\% P,M\% P) * C(N/P,M/P)\% P$

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int N,M,P;
int inv[],fac[];
int C(int x,int y){
if(x<y) return ;
return (ll)fac[x]*inv[fac[y]]%P*inv[fac[x-y]]%P;
}
int Lucas(){
if(N<M) return ;
ll ret=;
while(M){
ret=ret*C(N%P,M%P)%P;
N/=P;
M/=P;
}
return ret;
}
int main(){
int Test;
scanf("%d",&Test);
while(Test--){
scanf("%d%d%d",&N,&M,&P);
swap(N,M);
N+=M;
inv[]=;for(int i=;i<P;i++) inv[i]=(ll)(P-P/i)*inv[P%i]%P;
fac[]=;for(int i=;i<=N;i++) fac[i]=(ll)fac[i-]*i%P;
printf("%d\n",Lucas());
}
return ;
}

高斯消元

最后回代求解的时候,若发现某一项元系数为零,且式子右边常数为零,则有无数多个解,若常数不为零,则无解。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int inline readint(){
int Num=,Flag=;char ch;
while((ch=getchar())<''||ch>'') if(ch=='-') break;
if(ch=='-') Flag=-; else Num=ch-'';
while((ch=getchar())>=''&&ch<='') Num=Num*+ch-'';
return Num*Flag;
}
int N;
double A[][];
bool Gauss(){
int t;
for(int i=;i<=N;i++){
t=i;
for(int j=i+;j<=N;j++)
if(fabs(A[j][i])>fabs(A[t][i]))
t=j;
if(t!=i)
for(int j=i;j<=N+;j++)
swap(A[t][j],A[i][j]);
for(int j=i+;j<=N;j++){
double r=A[j][i]/A[i][i];
for(int k=i;k<=N+;k++)
A[j][k]-=A[i][k]*r;
}
}
for(int i=N;i>=;i--){
for(int j=i+;j<=N;j++)
A[i][N+]-=A[i][j]*A[j][N+];
if(A[i][i]==&&A[i][N+]==) return false;
A[i][N+]/=A[i][i];
}
return true;
}
int main(){
N=readint();
for(int i=;i<=N;i++)
for(int j=;j<=N+;j++)
A[i][j]=readint();
if(!Gauss()){
puts("No Solution");
return ;
}
for(int i=;i<=N;i++) printf("%.2lf\n",A[i][N+]);
return ;
}

NOIP数学相关模板整理的更多相关文章

  1. Noip数学整理

    目录 Noip数学整理 序 1 取模相关 2 质数相关 3.基本操作 4.方程相关 5.数列相关 6.函数相关 Noip数学整理 序 因为某些原因, Noip对于数学方面的考纲仅停留在比较小的一部分, ...

  2. 数学相关【真·NOIP】

    数论相关 上来就不会的gcd相关.见SCB他威胁我去掉了一个后缀的blog好了:https://blog.csdn.net/suncongbo/article/details/82935140(已经过 ...

  3. [自用]多项式类数学相关(定理&证明&板子)

    写在前面 由于上一篇总结的版面限制,特开此文来记录 \(OI\) 中多项式类数学相关的问题. 该文启发于Miskcoo的博客,甚至一些地方直接引用,在此特别说明:若文章中出现错误,烦请告知. 感谢你的 ...

  4. [总结]多项式类数学相关(定理&证明&板子)

    目录 写在前面 前置技能 多项式相关 多项式的系数表示 多项式的点值表示 复数相关 复数的意义 复数的基本运算 单位根 代码相关 多项式乘法 快速傅里叶变换 DFT IDFT 算法实现 递归实现 迭代 ...

  5. BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js

    BAT 前端开发面经 —— 吐血总结   目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...

  6. codeforces 687B - Remainders Game 数学相关(互质中国剩余定理)

    题意:给你x%ci=bi(x未知),是否能确定x%k的值(k已知) ——数学相关知识: 首先:我们知道一些事情,对于k,假设有ci%k==0,那么一定能确定x%k的值,比如k=5和ci=20,知道x% ...

  7. 【3D研发笔记】之【数学相关】(一):坐标系

    现在开始学习3D基础相关的知识,本系列的数学相关笔记是基于阅读书籍<3D数学基础:图形与游戏开发>而来,实现代码使用AS3,项目地址是:https://github.com/hammerc ...

  8. 转:基于IOS上MDM技术相关资料整理及汇总

    一.MDM相关知识: MDM (Mobile Device Management ),即移动设备管理.在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入 ...

  9. latch相关视图整理

    latch相关视图整理(原创) V$LATCH V$LATCH视图在选取X$KSLLT记录时,进行了Group By及SUM运算,从而得出了一个汇总信息,保存了自实例启动后各类栓锁的统计信息.常用于当 ...

随机推荐

  1. BZOJ_5415_[Noi2018]归程_kruscal重构树+倍增+最短路

    BZOJ_5415_[Noi2018]归程_kruscal重构树+倍增 Description www.lydsy.com/JudgeOnline/upload/noi2018day1.pdf 好久不 ...

  2. BZOJ_4066_简单题_KDtree

    BZOJ_4066_简单题_KDtree Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1&l ...

  3. [SHOI 2017] 组合数问题

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4870 [算法] 回顾组合数的定义 : C(N , M)表示将N个小球放入M个盒子里的 ...

  4. npm --- Node.js包管理器

    目录 1. 安装Node.js 2. 运行npm 3. npm介绍 3.1 安装插件 3.2 更新插件 3.3 卸载插件 3.4 查看当前目录中的插件列表 4. 使用cnpm 4.1 安装 npm( ...

  5. 双重检查锁实现单例(java)

    单例类在Java开发者中非常常用,但是它给初级开发者们造成了很多挑战.他们所面对的其中一个关键挑战是,怎样确保单例类的行为是单例?也就是说,无论任何原因,如何防止单例类有多个实例.在整个应用生命周期中 ...

  6. UVa 1631 Locker (DP)

    题意:有一个 n 位密码锁,每位都是0-9,可以循环旋转.同时可以让1-3个相邻数字进行旋转一个,给定初始状态和目状态,问你最少要转多少次. 析:很明显的一个DP题.dp[i][j][k] 表示前 i ...

  7. E20190215-mt

    parenthesis n. 圆括号; 插入语; 插入成分; 间歇; (parentheses) individual  adj. 个人的; 个别的; 独特的;    n. 个人; 个体; priva ...

  8. Multi-University板块

    力争补完所有 Multi-University 的"水题",任重而道远. HDU2819[二分匹配与矩阵性质] HDU2844[背包问题(二进制优化)] HDU2824[欧拉函数] ...

  9. Android NDK开发指南(二)Android.mk文件

    http://www.cnblogs.com/yaozhongxiao/archive/2012/03/06/2382225.html 1.  概述 Android.mk文件是用来描述build sy ...

  10. 渗透测试之无文件渗透简单使用-windows

    无文件渗透测试工作原理:无文件恶意程序最初是由卡巴斯基在2014年发现的,一直不算是什么主流的攻击方式,直到此次事件的发生.说起来无文件恶意程序并不会为了执行而将文件或文件夹复制到硬盘上,反而是将pa ...