基础数学(数据结构所需基础)-不定期更新中...

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/harisuperman/article/details/81018268

基础数学(数据结构所需基础)-不定期更新中…

1. 指数

例如:XaXb=Xa+b

2. 对数

在计算机科学中,除非有特别声明,否则所有的对数均以2为底
对数公式(四则运算法则):
loga(MN)=logaM+logaN ,
loga(M/N)=logaMlogaN ,
logaMn=nlogaM
换底公式: logmn=logam/logan
换底导出公式 : logMN=logNM
对数恒等式: a(logaM)=M

对数得来(10 为底数): 102=100,lg100=2

例(10 为底数):
计算该值: lg200lg2
计算过程: lg200lg2=lg200/2=lg100=2
例(10 为底数):
y=2^x,这就是一个次方函数,我们知道2^5=32,那么现在我想知道的就是32是2多少次方呢?这里就出现了我们提到的log函数,2就是指数函数中的底数,则y=2^x,的逆函数就是x=log2y,因排版原因,log2这个2是写在右下角。
现在知道以2为底数的log了,那不同底数的log按上面的理解就行了。

例如:
logAB=logcBlogcA;A,B,C>0,A1,c1
例如:
(1) 求 N ! (1 <= N <= 5000)中有多少位数字。
若直接求 N ! 的结果,然后再计算有多少位数字,也是可行的,因为是大数阶乘,所以要用数组来计算,会用到大量的乘法除法取余运算,时间空间花费都比较大。
用对数的性质来解这个题是最佳的选择。
首先我们知道 看一个数字有多少位就是看它是10的几次幂,如101有2位,102 有3位。
也就是 10x(k=

log10( N ! ) = log101 + log102 +  log103 + ... + log10N
int GetDigitsNumInFactorial(int n)
{
    double d = 0.0;
    for(int i = 1; i <= n; i++)
        d += log10(i);
    return int(d)+1;
}

(2) 对一个正整数n (n <= 1,000,000,000)和m (m <= 1,000,000,000)输出n的m次方的最左一位数字。
对于这个题目也是,n的范围这么大,肯定也不能直接去求了。还是利用对数来解决。
令x=log10(nm)=m*log10n,即nm=10x。设x的整数部分为a,小数部分为b,nm=10a*10b,对于10的整数次幂10a,第一位是1,所以,nm的第一位数取决于10b。

int GetLeftMostDigitOfMthPower(int n, int m)
{
    double x, a, b;
    x = m * log10(n);
    a = floor(x);
    b = x - a;
    return int(pow(10, b));
}
3. 级数

级数是指将数列的项依次用加号连接起来的函数
级数 公式: i=1n2i=2n+11 , i=1nAi=An+11A1
如果 0< A < 1, i=1nAi11A

4. 模运算

取余:取余运算在计算商值时向0方向舍弃小数位

取余,遵循尽可能让余数的绝对值小的原则
取余例子:
5 rem 3 = 2
-5 rem 3 = -2
5 rem -3 = 2
-5 rem -3 = -2

取模:取模运算在计算商值时向负无穷舍弃小数位

取模,遵循尽可能让商小的原则
取模例子:
5 mod 3 = 2
-5 mod 3 = 1
5 mod -3 = -1
-5 mod -3 = -2

5. 证明的方法
5.1) 归纳法证明
5.1.1) 基准情形
5.1.2) 归纳假设
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页