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