总结C/C++关于数学知识以及一些比较重要的算法
1.数论
整数型问题:整除、最大公约数、最小公倍数、欧几里得算法、扩展欧几里得算法.
素数问题:素数判断、区间素数统计.
同余问题:模运算、同于方程、快速幂、中国剩余定理、逆元、整数分解、同余定理.
不定方程.
乘性函数:欧拉函数、伪随机数、莫比乌斯反演.
2.组合数学
排列组合:技术原理、特殊排列、排列生成、组合生成.
母函数:普通型、指数型.
递推关系:斐波那契数列、Stirling数、Catalan数.
容斥原理、鸽巢原理
群:Polya定理
线性规划:单纯行法.
3.矩阵、线性代数、高精度计算、概率、数学期望、组合游戏、傅里叶变换、费马小定理、费马大定理.
大数加法
大数a+b也就是用字符串输入一串数字代表这个数字的大小,然后模拟一下加法的过程就可以了,为了方便计算把最低位个位放到第一个逆序计算比较方便
int a[1010],b[1010],c[1010],l1,l2,i,j,n,t,x,y=1;
char s1[1010],s2[1010];
scanf("%s %s",s1,s2);
l1=strlen(s1),l2=strlen(s2);//计算长度
//初始化数组abc全为0
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
//把字符串s1 s2逆置存入数组a,b,逆序存方便计算
//就是把个位放到第一位依次往后递推
for(i=l1-1,j=0;i>=0;i--){
a[j++]=s1[i]-'0';
}
for(i=l2-1,j=0;i>=0;i--){
b[j++]=s2[i]-'0';
}
//这里计算a,b的每一位存入c
//这里应该就明白为什么把数组abc都初始化为0了把
//方便计算a+b就算长度不相等也可以利用0弥补,可以模拟一下加法过程。
//这也就是逆序存储的方便计算,后面加0不影响大小
for(i=0;i<1005;i++)