数学知识总结(持续更新)

仅供本人使用,其他人看看参考下就好 

1. 知道三角形三个顶点坐标计算三角形面积:三个顶点A(x1,y1),B(x2,y2),C(x3,y3);S=1/2*(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));

2.两个集合A{1,2,3}B{2,3,4},A+B={1,2,3,4},A-B={1}是表示除去和B中相同的元素后还剩下的元素

3.错排公式:D(n)=(n-1)*(D(n-1)+D(n-2))

当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.

第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;

第二步,放编号为k的元素,这时有两种情况:⑴把它放到位置n,那么,对于剩下的n-1个元素,由于第k个元素放到了位置n,剩下n-2个元素就有D(n-2)种方法;⑵第k个元素不把它放到位置n,这时,对于这n-1个元素,有D(n-1)种方法;

综上得到

D(n) = (n-1) [D(n-2) + D(n-1)]

4.阶乘位数的计算方法一:可以将n!表示成10的次幂,即n!=10^M(10的M次方)则不小于M的最小整数就是 n!的位数,对该式两边取对数,有 M =log10^n!
  即:
  M = log10^1+log10^2+log10^3...+log10^n
  循环求和,就能算得M值,该M是n!的精确位数

代码:

#include<map>
#include<stack>
#include<queue>
#include<cmath>
#include<string>
#include<cstdio>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5;
typedef long long ll;
ll a[N];
int main()
{
    int test;
    scanf("%d",&test);
    while(test--)
    {
        int n,d=0,i;
        double dd=0.0;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
           dd+=(double)log10(i);
           printf("%d\n",(int)dd+1);
    }
    return 0;
}

方法二
  利用斯特林(Stirling)公式的进行求解。下面是推导得到的公式:
  res=(long)( (log10(sqrt(4.0*acos(0.0)*n)) + n*(log10(n)-log10(exp(1.0)))) + 1 );
  当n=1的时候,上面的公式不适用,所以要单独处理n=1的情况!

5.求n!末尾0的个数

思路:

一个数 n 的阶乘末尾有多少个 0 取决于从 1 到 n 的各个数的因子中 2 和 5 的个数

而 2 的个数是远远多余 5 的个数的, 因此求出 5 的个数即可

题解中给出的求解因子 5 的个数的方法是用 n 不断除以 5, 直到结果为 0

然后把中间得到的结果累加. 例如, 100/5 = 20, 20/5 = 4, 4/5 = 0

则 1 到 100 中因子 5 的个数为 (20 + 4 + 0) = 24 个

即 100 的阶乘末尾有 24 个 0. 其实不断除以 5

是因为每间隔 5 个数有一个数可以被 5 整除, 然后在这些可被 5 整除的数中

每间隔 5 个数又有一个可以被 25 整除, 故要再除一次, ... 直到结果为 0, 表示没有能继续被 5 整除的数了.

代码:

#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int test;
    scanf("%d",&test);
    while(test--)
    {
        int n;
        int i,j,k=0,ans=0,ans1=0;
        scanf("%d",&n);
        while(n>0)
        {
            ans+=n/5;
            n/=5;
        }
        printf("%d\n",ans);
    }
    return 0;
}

6.求任何数字n在一定周期t中最小正整数:

int ans = ((n % t)+t) % t;

7.三角形外接圆半径计算方法:R=(a*b*c)/(4*s),s=sqrt(p*(p-a)*(p-b)*(p-c)),p=(a+b+c)/2.0;

代码实现:

#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<string>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
#define pi acos(-1.0)
const int maxn=1e5;
const int mod=1e9+7;
const int inf=0x3f3f3f;
char s[maxn];
int main()
{
    double a,b,c;
    while(scanf("%lf%lf%lf",&a,&b,&c)!=EOF)
    {
        double ans=a*b*c;
        double p=(a+b+c)/2.0;
        double s=sqrt(p*(p-a)*(p-b)*(p-c));
        double r=ans/(4.0*s);
        printf("%.2lf\n",r);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值