ACM常用模板——数论

原创 2015年11月17日 15:43:02

(一)全排列

设一组数p = {r1, r2, r3, … ,rn}, 全排列为perm(p),pn = p – {rn}。则perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), … , rnperm(pn)。当n = 1时perm(p} = r1。

如:求{1, 2, 3, 4, 5}的全排列

1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。

由于一个数的全排列就是其本身,从而得到以上结果。

2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六组数。

即以3开头的和4,5的全排列的组合、以4开头的和3,5的全排列的组合和以5开头的和3,4的全排列的组合.

#include <stdio.h>
int n = 0;
void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf("%d ", list[i]);
printf("\n");
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
swap(&list[k], &list[i]);
}
}
}
int main()
{
int list[] = {1, 2, 3, 4, 5};
perm(list, 0, 4);
printf("total:%d\n", n);
return 0;
}

(二)求组合数
#include <iostream>
#include <cstring>
#define mod 1000000007
using namespace std;
int c[1005][1005];
void init(long long n,long long m)
{
long long i,j;
memset(c,0,sizeof(c));
for(i=0;i<=m;i++)
c[0][i]=c[1][i]=1;
for(i=0;i<=m;i++)
c[i][i]=1;
for(i=0;i<=n;i++)
c[i][0]=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(i!=j)
c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
}
}
}
int main()
{
int n,m;
init(1000,1000);
while(cin>>n>>m){
cout<<c[n][m]<<endl;
}
}


 

ACM数论中的常见的模板和结论

1:最大公约数的求法 欧几里得算法实现。递归实现 1 #include 2 #includestring.h> 3 #include 4 #include 5 using n...
  • NaCl__
  • NaCl__
  • 2015年12月31日 08:41
  • 511

ACM 数论知识 合集

关于欧几里得的那些事真是醉了啊,刚才写了两个小时的博文,想保存到草稿箱里,结果显示服务器异常,结果返回一看,卧槽,写的都没了,心中是万千草泥马呼啸而过呀。。。还得从新写呀。欧几里得算法最大公约数问题是...
  • baidu_33153085
  • baidu_33153085
  • 2016年08月06日 16:50
  • 3103

数论经典题目

题目:Special Prime   推导: n^b + p*n^(b-1) = m^b n^(b-1)*[n+p]=m^b 因为n里面要么有p因子,要么没有,所以 gcd(n^(b-1),n+p)=...
  • ACdreamers
  • ACdreamers
  • 2013年02月05日 22:55
  • 3561

快速数论变换模板(NTT)

快速数论变化(NTT)是的原理其实和快速傅里叶变换是一样的原理。 对于形如m= c*2^n+1的费马素数,假设其原根为g。那么瞒住g^(m-1)==1  而且正好(m-1)能整除2^n的。所所以可以在...
  • u012127882
  • u012127882
  • 2015年07月31日 20:32
  • 1946

ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)

萌新常用的都在这了,本萌新的模板集。
  • qq_32265245
  • qq_32265245
  • 2016年11月05日 18:00
  • 8644

快速傅里叶变换(FFT)和数论变换(NTT)模板

#include #define ll long long #define dob complex const int N=120010; const double pi=acos(-1.0); us...
  • pan1197349032
  • pan1197349032
  • 2016年09月04日 15:39
  • 508

ACM经典算法之数论

转自:http://blog.sina.com.cn/s/blog_93d2ceba010145dr.html 一、(x的二进制长度) 语法:resul...
  • Enjoying_Science
  • Enjoying_Science
  • 2015年08月18日 22:38
  • 614

ACM 算法模板

ACM 代码模板一、字符串类1、manacher算法///$#x#x#x#x#x#x# void manacher(string& s, int *R, int n) { int p = 0,...
  • zichenzhiguang
  • zichenzhiguang
  • 2016年08月19日 21:03
  • 601

ACM数论 板子

#include using namespace std; const int MAXN= 100005; const int mod = 1e9+7; typedef long long LL; L...
  • fanhansheng
  • fanhansheng
  • 2017年07月31日 13:56
  • 194

STL模板库在ACM中的应用(I)

一ACM和STL简介   1.ACM全称世界大学生程序设计竞赛 主办方是美国计算机协会(acm)  。参赛选手需在给定时间内自行设计编写算法来完成给定的题目。具体介绍请点连接:ACM      2.S...
  • xcc_xing99
  • xcc_xing99
  • 2016年01月30日 21:24
  • 959
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ACM常用模板——数论
举报原因:
原因补充:

(最多只允许输入30个字)