数学知识小记
2017-05-19 13:11
387 查看
2017/05/19 12:12:53.
真de弱智,今天连等差数列求和公式都忘了...
1.等差数列.
通项公式:a(n) = a(1) + (n-1)*d;
前n项和: S(n) = n*a(1) + n*(n-1)/2*d;
变形:S(n) = (a(1) + a(n))*n/2;
2.等比数列.
通项公式:a(n) = a(1)*q^(n-1);
前n项和:S(n) = a(1)*(1 - q^n)/(1-q);
变形:S(n) = (a(1) - a(n)*q)/(1-q);
2017/06/28 00:46:41
regular convex polygon with n sides.(具有n条边的规则凸多边形)
求内角度和为:(n-2)*180
所以求规则凸多边形的单个内角度为:(n-2)*180/n
2017/07/06 17:46:52
因数:不包括零的任意数(正数和负数)。
正因数:不包括零的任意正数。
2017/07/29 23:45:47
鸽巢原理:
n+1个物体放入n个盒子,那么至少有一个盒子包含两个或更多的物体。
应用:
n个数中,必然存在j,k(j<=k)满足Aj,Aj+1...Ak-1,Ak的和是n的倍数。
分析:进行求(A1),(A1+a2),(A1+A2+A3),...,(A1+A2...An)。
① 如果存在一个%n = 0的,则直接证明得存在。
② %n都不等于0,而%n不为0的个数为n-1个,则根据鸽巢原理能够得到肯定存在两个或更多模数相同的数,所以找到这两个模数相同的位置便是j,k。
2017/07/31 15:06:21
求一个数的所有质因子
O(1)求从1到N的异或:
判断组合数的奇偶性:
给定两个数m,n,求m!分解质因数后因子n的个数。如果相乘直接求的话会超出数据类型的范围。下面给出一种效率比较高的算法,我们一步一步来。
m! = 1*2*3*……*(m-2)*(m-1)*m
可以表示成所有和n的倍数有关的乘积再乘以其他和n的倍数没有关系的
= (n*2n*3n*......*kn)*other
other是不含n因子的数的乘积,因为 kn<=m 而k肯定是最大值,所以 k = m/n
= n^k*(1*2*......*k)*other
= n^k*k!*other
从这个表达式中可以提取出k个n,然后按照相同的方法循环下去可以求出k!中因子n的个数。
每次求出n的个数的和就是m!中因子n的总个数。
ll work(int m, int b)
{
ll ans = 0;
while(m)
{
m /= b;
ans += m;
}
return ans;
}
静待更新...
真de弱智,今天连等差数列求和公式都忘了...
1.等差数列.
通项公式:a(n) = a(1) + (n-1)*d;
前n项和: S(n) = n*a(1) + n*(n-1)/2*d;
变形:S(n) = (a(1) + a(n))*n/2;
2.等比数列.
通项公式:a(n) = a(1)*q^(n-1);
前n项和:S(n) = a(1)*(1 - q^n)/(1-q);
变形:S(n) = (a(1) - a(n)*q)/(1-q);
2017/06/28 00:46:41
regular convex polygon with n sides.(具有n条边的规则凸多边形)
求内角度和为:(n-2)*180
所以求规则凸多边形的单个内角度为:(n-2)*180/n
2017/07/06 17:46:52
因数:不包括零的任意数(正数和负数)。
正因数:不包括零的任意正数。
2017/07/29 23:45:47
鸽巢原理:
n+1个物体放入n个盒子,那么至少有一个盒子包含两个或更多的物体。
应用:
n个数中,必然存在j,k(j<=k)满足Aj,Aj+1...Ak-1,Ak的和是n的倍数。
分析:进行求(A1),(A1+a2),(A1+A2+A3),...,(A1+A2...An)。
① 如果存在一个%n = 0的,则直接证明得存在。
② %n都不等于0,而%n不为0的个数为n-1个,则根据鸽巢原理能够得到肯定存在两个或更多模数相同的数,所以找到这两个模数相同的位置便是j,k。
2017/07/31 15:06:21
求一个数的所有质因子
#include <stdio.h> int num[1005], cnt; void ZhiYinZi(int n) { cnt = 0; for(int i = 2 ; i*i <= n; ++i) { if(n%i == 0) { num[++cnt] = i; while(n%i == 0) n /= i; } } if(n > 1) num[++cnt] = n; } int main() { int n; scanf("%d", &n); ZhiYinZi(n); for(int i = 1; i <= cnt; ++i) printf("%d ", num[i]); puts(""); return 0; }
O(1)求从1到N的异或:
LL xor_n(LL n) { LL t = n & 3; if(t & 1) return t/2ll^1; return t/2ll^n; }
判断组合数的奇偶性:
int isodd(int n, int m) { while(m) { if((m&1) && !(n&1)) return 0; m >>= 1, n >>= 1; } return 1; } //OR int isodd(int n, int m) { return (n&m) == m; }
给定两个数m,n,求m!分解质因数后因子n的个数。如果相乘直接求的话会超出数据类型的范围。下面给出一种效率比较高的算法,我们一步一步来。
m! = 1*2*3*……*(m-2)*(m-1)*m
可以表示成所有和n的倍数有关的乘积再乘以其他和n的倍数没有关系的
= (n*2n*3n*......*kn)*other
other是不含n因子的数的乘积,因为 kn<=m 而k肯定是最大值,所以 k = m/n
= n^k*(1*2*......*k)*other
= n^k*k!*other
从这个表达式中可以提取出k个n,然后按照相同的方法循环下去可以求出k!中因子n的个数。
每次求出n的个数的和就是m!中因子n的总个数。
ll work(int m, int b)
{
ll ans = 0;
while(m)
{
m /= b;
ans += m;
}
return ans;
}
静待更新...
相关文章推荐
- 图像滤波相关的一点数学知识 回顾总结
- SAT数学考题知识范围增量分析
- Unity3D中数学知识之【1】:SmoothDamp平滑阻尼
- 数学/物理知识在软件/算法中应用(1)
- 卷积神经网络(CNN)相关知识以及数学推导
- 数学知识
- 数学知识体系
- 点是否在多边形中(数学知识)
- EF基础知识小记四(数据库=>模型设计器)
- Matlab基础知识小记
- 数学小知识总结(每次更新)
- 机器学习中涉及到的大学高等数学的一些知识
- 蓝桥杯C语言培训4 数学知识的运用 例题4 公约公倍
- 数学基础知识——三线插值
- 数学知识的应用(一步之遥--暴力、欧几里得)
- 压缩感知中的数学知识:稀疏、范数、符号arg min
- 【Cocos2D学习】Lua——数学知识的基本应用
- ALGO-100 整除问题 循环语句 数学知识 VIP试题
- Unity3d 数学知识备忘
- 从文本分类问题中的特征词选择算法追踪如何将数学知识,数学理论迁移到实际工程中去