一些数学小思维Tips长期更新积累

来源:互联网 发布:php源代码加密 原理 编辑:程序博客网 时间:2024/05/22 12:05

1.数根的求法

数根的概念:如果把一个数的各位数字相加得到一个和,再把这个和的各位数字相加又得一个和,再继续作数字和,直到最后的数字和是个位为止,那么这个数就是该数的数根。

求法:

int num[]={9,1,2,3,4,5,6,7,8};root_x = num[x%9];

如果x特别大,比如x有100位,可以先用字符串模拟一次得到一个较小的数x’,然后就可以知道x的数根为 root_x=num[x’% 9];


2.快速求N!的位数

首先要知道一个数有多少位的求法,x的位数为lg(x)+1;
其次用到斯特林公式是求当n很大的时候n!的近似值,即使n很小时也会非常精确;
这里写图片描述

综上所述:求N!的位数的方法是 lg(n!)+1;而 n!的近似值用斯特林公式即可求;
那么位数为:
((log(sqrt(2*n*pi)) + n * log((double)n) - n) / log(10.0) ) + 1;


3.威尔逊定理

当且仅当p为素数时,[ (p-1)! +1 ] mod p = 0;
因为:[ (p-1)! +1 ] mod p= (p-1)!%p + 1%p = p-1 +1 =p = 0;

推广

  • 当p是素数时,(p-1)! Mod p = p-1;
  • 当p不是素数时, (p-1)! Mod p = 0;

    例题:求 (n-1)! Mod n :
    Solutions :

    if(n==4) ans=2; //4是个特例    else if(n为素数)  ans=n-1;    else  ans = 0;

4.由任意三角形的顶点坐标求其面积

三角形的面积算法用海伦公式一般是不提倡的,介绍一种新的方法:

double area(dounle x0,double y0,double x1,double y1,double x2,double y2){   return x0*y1+x2*y0+x1*y2-x2*y1-x0*y2-x1*y0;}

它给出的是三角形有向面积的两倍;一种较为简单的记忆方法:
这里写图片描述
就相当于求该行列式的值。

可以延生到一个问题:判断一个点o是否在三角形的内部问题
当且仅当S△ABC=S△OAB+S△OBC+S△OCA时,该点在三角形内,其中判断两个浮点数是否相等时,要注意两个数的差是否小于一个事先给定的eps 1e-6;


5.卡塔兰数(Catalan)

比百度百科更好的解释:
http://www.cppblog.com/MiYu/archive/2010/08/07/122573.html

数列的前几项为:1,1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012,
742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190,
6564120420, 24466267020, 91482563640, 343059613650, 1289904147324,
4861946401452, …

一般的常用递推公式:h(n)=h(n-1)*(4*n-2)/(n+1);(h(0)=h(1)=1)
常见的应用:栈出的次序,括号配对的姿势


6.费马数

费马数是以数学家费马命名一组自然数,具有形式:
这里写图片描述 其中 n 为非负整数。所有具有形式 2^n+ 1 的素数必然是费马数,这些素数称为费马素数。已知的费马素数只有 F0 至 F4 五个。

性质:

  • 任意两个费马数都互质。
  • Fn的位数D(n,b)可以表示成以b 为基数就是

这里写图片描述

  • 除了F1 = 2 + 3以外没有费马数可以表示成两个素数的和。
  • 当p是奇素数的时候,没有费马数可以表示成两个数的p次方相减的形式。
  • 除了F0和F1,费马数的最后一位是7。
  • 所有费马数的倒数之和是无理数。

此部分持续更新中..


Final:初等数论①读书笔记

1.令 p1=2 , p2=3 , p3=5 , p4=7 … pn=第n个素数,设 X = (p1*p2*p3*p4*…pn)+1,那么X也是素数。

2.凡大于4的偶数都是两个奇素数之和。(哥德巴赫猜想)

3.假设a和b都是正整数,且a>b,a = b*q+r (0 < r < b),其中q,r都是正整数,则a和b的最大公约数等于b和r的最大公约数,即(a,b)=(b,r)。

..未完

0 0
原创粉丝点击