基本数学问题算法

一.维多项式求值
在这里插入图片描述
秦九韶算法:

A[]//由低次项系数向高次项系数依次排列数组,double类型,n是项数,x自变量
double polynomial(double A[],int n,int x){
	int i;
	double result=A[n-1];
	for(i=n-2;i>=0;i--){
		result=result*x+A[i];
	}
	return result;
}

二.随机数生成

范围:0~32767
#include<time.h>
srand((int)time(0));//随机种子函数
rand()//伪随机数

三.复数运算

//a,b是第一个复数的实部和虚部,c,d 是第二个复数的实部和虚部
//*e,*f分别是计算后的实部和虚部 
void Cplus(double a,double b,double c,double d,double *e,double *f){
	/************************加法*******************************/
	//(a+ci)-(b+di)=(a-b)+(c-d)i;
	*e=a+c;
	*f=b+d; 
	/************************减法*******************************/
	//(a+bi)+(c+di)=(a+b)+(c+d)i;
     *e=a-c;
     *f=b-d;
     /************************乘法*******************************/
     //(a+bi)*(c+di)=(ac-bd)+(ad+bc)i;
     *e=a*c-b*d;
     *f=a*d+b*c;
     /************************除法*******************************/
     //(a+bi)/(c+di)=(ac+bd)/(c^2+d^2)+(bc-ad)/(c^2+d^2);
     *e=(ac+bd)/(c^2+d^2)
     *f=(bc-ad)/(c^2+d^2)
     
}

四.阶乘
原理:递归

int fact(int n){
	if(n==1){
		return 1;
	}else
	{
		return n*fact(n-1);
	}
	
} 

五.矩阵运算

1.矩阵加法:对应项相加
void MatrixPlus(double a[],double b[],double c[],int m,int n){
	for(int i=0;i<n*m;i++){
		c[i]=a[i]+b[i];
	}
}

2.矩阵减法:对应项相减
void MatrixMinus(double a[],double b[],double c[],int m,int n){
	for(int i=0;i<n*m;i++){
		c[i]=a[i]-b[i];
	}
}

3.矩阵乘法
给定m*n矩阵a[m][n]     给定n*k矩阵b[n][k]
乘积矩阵: c[m][k]=a[m][n]*b[n][k]
注意:乘积矩阵c[][]是m*k阶的。两个矩阵参与相乘的前提条件是,矩阵a[][]的列数必须等于矩阵b[][]的行数
矩阵乘法不具有交换律:a[][]*b[][]!=b[][]*a[][]
void MatrixMinus(double a[],double b[],double c[],int m,int n,int k){
	int u;
	for(int i=0;i<m;i++){
		for(int j=0;j<k;j++){
			u=i*k+j;
			c[u]=0.0;
			for(int l=0;l<n;l++){
				c[u]+=a[i*n+l]*b[l*k+j];
			}
		}
	}
}

4.快速幂运算

long pow(int a,int b){
	long x=a;
	long res=1;
	while(b>0){
		if(b&1){
			res*=x;//右移一位 
		}
		b>>=1;
		x=x*x;
	}
	return res; 
}

6.2的n次方

int pow_2(int n) {
    return 1 << n;
}
发布了160 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Anterior_condyle/article/details/104834510
今日推荐