C/C++数论/数学算法总结(关于数学知识以及一些比较重要的算法)

总结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++)
  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值