日常小收获二_数学

1、求任意三角形的面积,海伦公式

 

 

2、三角形的边和角来表示它的外接圆的半径

3、三角形的三边来表示它的外接圆的半径

4、三角形的三边来表示它的内切圆的半径

5、三角形的边和角来表示它的内切圆的半径

6、阶乘

写一个程序,计算N(1≤N≤50,000,000)阶乘的最右边的非零位的值。

最后取模大约7位才可以,否则可能会损失精度。

代码:
 

#include<bits/stdc++.h>
#define up(i, x, y) for(int i = x; i <= y; i++)
#define down(i, x, y) for(int i = x; i >= y; i--)
#define maxn ((int)1e5 + 10)
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int n;
int main()
{
    scanf("%d", &n);
    ll ans = 1;
    ll two = 0;
    ll fiv = 0;
    for(int i = 1; i <= n; i++)
    {
        ans *= i;
        while(ans % 10 == 0) ans /= 10;
        ans %= 10000000;
    }
    printf("%d\n", ans % 10);
}

14!=87178291200。到这里我们的程序依然正确。result存贮的是2。

15!=1307674368000。然而,2*15=30,去0后是3而非正确的8。 // 精度在此损失的!!!  最后一位成了0

事实上,我们存贮的应是12,12*15=180,去0后是18,个位是正确的8。

7、取模技巧之一

a / b % mod  当mod与b不互质时,就无法用逆元求解了,所以可以利用下面的公式

      注: (a mod (b * p) ),不是先modb再*p;

应用场景:让你对a/b取小数点后第n,n+1,n+2位数。

8、斐波那契平方和

9、sum = n/1 + n/2 + n/3 + n/4 + ······ + n/n 

#include<bits/stdc++.h>
#define up(i, x, y) for(int i = x; i <= y; i++)
#define down(i, x, y) for(int i = x; i >= y; i--)
#define maxn ((int)1e5 + 10)
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
ll n;
int main()
{
    scanf("%lld", &n);
    ll t = (ll)sqrt(n);
    ll sum = 0;
    for(int i = 1; i <= t; i++)
    {
        sum += n / i;
    }
    sum = sum * 2 - t * t;// 根据 y = n / x 的对称性得出
    cout<<sum<<'\n';
}

10、gcd

11、错排公式:

考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为D(n)。

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

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值