基础数学(数据结构所需基础)-不定期更新中…
1. 指数
例如: X a X b = X a + b X^aX^b = X^a+b XaXb=Xa+b …
2. 对数
在计算机科学中,除非有特别声明,否则所有的对数均以2为底
对数公式(四则运算法则):
$loga^(MN) = logaM+logaN $ ,
l
o
g
a
(
M
/
N
)
=
l
o
g
a
M
−
l
o
g
a
N
loga^(M/N) = loga^M-loga^N
loga(M/N)=logaM−logaN ,
$loga{Mn} = nloga^M $
换底公式:
l
o
g
m
n
=
l
o
g
a
m
/
l
o
g
a
n
logm^n = loga^m/loga^n
logmn=logam/logan
换底导出公式 : $ logM^N = -logN^M $
对数恒等式:
a
(
l
o
g
a
M
)
=
M
a^(loga^M) = M
a(logaM)=M
对数得来(10 为底数): $ 10^2 = 100 , , ,lg100 = 2$
例(10 为底数):
计算该值: l g 200 − l g 2 lg200 - lg2 lg200−lg2
计算过程: l g 200 − l g 2 = l g 200 / 2 = l g 100 = 2 lg200-lg2 = lg200/2 = lg100 = 2 lg200−lg2=lg200/2=lg100=2
例(10 为底数):
y=2x,这就是一个次方函数,我们知道25=32,那么现在我想知道的就是32是2多少次方呢?这里就出现了我们提到的log函数,2就是指数函数中的底数,则y=2^x,的逆函数就是x=log2y,因排版原因,log2这个2是写在右下角。
现在知道以2为底数的log了,那不同底数的log按上面的理解就行了。
例如:
l o g A B = l o g c B l o g c A ; A , B , C > 0 , A ≠ 1 , c ≠ 1 logA^B = \frac{logc^B}{logc^A}; A,B,C > 0, A \neq 1, c \neq 1 logAB=logcAlogcB;A,B,C>0,A̸=1,c̸=1
例如:
(1) 求 N ! (1 <= N <= 5000)中有多少位数字。
若直接求 N ! 的结果,然后再计算有多少位数字,也是可行的,因为是大数阶乘,所以要用数组来计算,会用到大量的乘法除法取余运算,时间空间花费都比较大。
用对数的性质来解这个题是最佳的选择。
首先我们知道 看一个数字有多少位就是看它是10的几次幂,如101有2位,102 有3位。
也就是 10x(k=<x<k+1,k为整数,x为浮点数),则 10x的结果就有k+1位数字。那也就是>我们要求log10( N ! )
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)=mlog10n,即nm=10x。设x的整数部分为a,小数部分为b,nm=10a10b,对于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
=
1
n
2
i
=
2
n
+
1
−
1
\sum_{i=1}^n {2^i} = 2^{n+1} -1
∑i=1n2i=2n+1−1 ,
∑
i
=
1
n
A
i
=
A
n
+
1
−
1
A
−
1
\sum_{i=1}^n {A^i} = \frac{A^{n+1}-1}{A-1}
∑i=1nAi=A−1An+1−1
如果 0< A < 1,
∑
i
=
1
n
A
i
≤
1
1
−
A
\sum_{i=1}^n {A^i} \leq \frac{1}{1-A}
∑i=1nAi≤1−A1
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