对于一个这样的式子: ( x + y ) n (x+y)^n (x+y)n
展开式如下:
( x + y ) n = ∑ i = 0 n ( i n ) x n − i y i (x+y)^n=\sum_{i=0}^{n}{(^n_i)x^{n-i}y^{i}} (x+y)n=i=0∑n(in)xn−iyi
其中 ( i n ) = n ( n − 1 ) . . . ( n − i + 1 ) i ! (^n_i)=\frac{n(n-1)...(n-i+1)}{i!} (in)=i!n(n−1)...(n−i+1)
牛顿二项式定理是对二项式定理的扩展,通过牛顿二项式定理可以得到 ( x + y ) α (x+y)^\alpha (x+y)α
的展开式,其中 α \alpha α是任意实数。
设 α \alpha α为任意实数, x , y x,y x,y满足 0 ≤ ∣ x ∣ < ∣ y ∣ 0 \leq |x| < |y| 0≤∣x∣<∣y∣,有
( x + y ) α = ∑ k = 0 ∞ ( k n ) x α y α − k (x+y)^{\alpha}=\sum_{k=0}^{\infty}{(^n_k)x^{\alpha}y^{\alpha-k}} (x+y)α=k=0∑∞(kn)xαyα−k
设 z = x / y , ∣ z ∣ < 1 z=x/y,|z| < 1 z=x/y,∣z∣<1,那么 ( x + y ) α = y α ( 1 + z ) α (x+y)^{\alpha}=y^{\alpha}(1+z)^{\alpha} (x+y)α=yα(1+z)α,那么等价于求
( 1 + z ) α (1+z)^{\alpha} (1+z)α即可。
( 1 + z ) α = ∑ k = 0 ∞ ( k α ) z k (1+z)^{\alpha}=\sum_{k=0}^{\infty}{(^{\alpha}_k)z^{k}} (1+z)α=k=0∑∞(kα)zk
设 n n n为正整数,我们用 − n -n −n代替 α \alpha α,有
( k a ) = ( k − n ) = − n ( − n − 1 ) . . . ( − n − k + 1 ) k ! = ( − 1 ) k ( k n + k − 1 ) (^{a}_{k})=(^{-n}_{k})=\frac{-n(-n-1)...(-n-k+1)}{k!}=(-1)^k(^{n+k-1}_{k}) (ka)=(k−n)=k!−n(−n−1)...(−n−k+1)=(−1)k(kn+k−1)
因此,对于 ∣ z ∣ < 1 |z|<1 ∣z∣<1有:
( 1 + z ) − n = 1 ( 1 + z ) n = ∑ k = 0 ∞ ( − 1 ) k ( k n + k − 1 ) z k (1+z)^{-n}=\frac{1}{(1+z)^n}=\sum_{k=0}^{\infty}{(-1)^k(^{n+k-1}_k)z^{k}} (1+z)−n=(1+z)n1=k=0∑∞(−1)k(kn+k−1)zk
用 − z -z −z代替 z z z得:
( 1 − z ) − n = 1 ( 1 − z ) n = ∑ k = 0 ∞ ( k n + k − 1 ) z k (1-z)^{-n}=\frac{1}{(1-z)^n}=\sum_{k=0}^{\infty}{(^{n+k-1}_k)z^{k}} (1−z)−n=(1−z)n1=k=0∑∞(kn+k−1)zk
若 n = 1 n=1 n=1得:
( 1 + z ) − 1 = 1 ( 1 + z ) = ∑ k = 0 ∞ ( − 1 ) k z k (1+z)^{-1}=\frac{1}{(1+z)}=\sum_{k=0}^{\infty}{(-1)^kz^{k}} (1+z)−1=(1+z)1=k=0∑∞(−1)kzk
( 1 − z ) − 1 = 1 ( 1 − z ) = ∑ k = 0 ∞ z k (1-z)^{-1}=\frac{1}{(1-z)}=\sum_{k=0}^{\infty}{z^{k}} (1−z)−1=(1−z)1=k=0∑∞zk
利用这个式子我们就可以求任意精度的开根操作了。
例如求 20 \sqrt{20} 20
20 = 4 + 16 = ( 4 + 16 ) 1 2 = 4 ( 1 + 0.25 ) 1 2 \sqrt{20}=\sqrt{4+16}=(4+16)^{\frac{1}{2}}=4(1+0.25)^{\frac{1}{2}} 20=4+16=(4+16)21=4(1+0.25)21
然后展开即可。
求 20 \sqrt{20} 20的程序
/*******************************
Author:galaxy yr
LANG:C++
Created Time:2019年10月04日 星期五 16时15分42秒
*******************************/
#include
const int maxn=3005;
long double x,c[maxn][maxn];
long double C(double a,double k)
{
long double res=1;
for(double i=a;i>=a-k+1;i--) res*=i;
for(double i=1;i<=k;i++)
res/=i;
return res;
}
long double solve()
{
long double x=1.25,a=0.5,z=x-1;
if(z<0)z=-z;
long double s=1,ans=0;
for(int k=0;k<=170;k++)
{
ans+=C(a,k)*s;
s*=z;
}
return 4*ans;
}
int main()
{
std::cout<<solve()<<std::endl;
return 0;
}