求n!的位数
/*原理:log10(n!)=log10(1*2*...*n)=log10(1)+log10(2)+...+log10(n)*/
for(i=1; i<=n; i++)
sum+=log10((double)i);
sum++; //sum是double型的
欧几里得算法,求最大公因子
EUCLID(int a,int b)
{
if(b==0) return a;
else EUCLID(b,a%b);
}
排列组合公式
int pacf(int m,int n) //用的是int型函数
{
int i,k; //这里的k是最终值,如果数值比较大可以改用64的
if(n==0||n==m) k=1;
else
{
k=m;
for(i=m-1; i>m-n; i--)k*=i;
for(i=2; i<=n; i++)
k/=i;
}
return k;
}
求1..n-1中与n互质的数的个数
int eular(int n)
{
int ret=1,i;
for (i=2; i*i<=n; i++)
if (n%i==0)
{
n/=i,ret*=i-1;
while (n%i==0) n/=i,ret*=i;
}
if (n>1)
ret*=n-1;
return ret;
}
求π
#include<cmath> //注意头文件
#define pai acos(-1.0)
点到直线的距离
double lenth(point x,point y,point z) //求点z到直线xy的距离
{
if(x.x==y.x) return fabs(z.x-x.x);
double a=(x.y-y.y)/(x.x-y.x);
double b=x.y-a*x.x;
double ans=fabs(a*z.x-z.y+b)/sqrt(a*a+1);
return ans;
}
两点的距离
double juli(point a,point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}