数学
姬小野
这个作者很懒,什么都没留下…
展开
-
初步数论-扩展欧几里得&线性同余方程
这篇博客我将介绍数论中的扩展欧几里得算法(extended Euclidean algorithm ),以及其在解线性同余方程(乘法逆元)中的运用.首先要了解几个概念: 欧几里得算法 扩展欧几里得算法 线性同余方程欧几里得算法是一种求解两个正整数a, b的最大公因子(一般记为gcd,gcd(a, b) )的方法,这个方法最早被记载在欧几里得的<<几...原创 2018-01-04 18:44:01 · 708 阅读 · 0 评论 -
斐波那契_矩阵快速幂解法
学过矩阵学了矩阵再看斐波那契数列, 秒懂, 结合矩阵快速幂, 加深了一个概念的理解: 矩阵也就是一个基本的计算单位.矩阵快速幂解法其实就是快速幂+矩阵. 和普通的快速幂有什么不同? 不同的是基数的类型,快速幂的过程还是一样的. 同样的,快速幂结果一般取模, 因为数据实在是太大了. 那么矩阵快速幂是否也应该取模?那么推导一下似乎可以发现,矩阵的每个数都取模p,因为结果其实就是矩阵的某个元...原创 2018-07-26 14:55:05 · 2505 阅读 · 0 评论 -
矩阵加速(递推式)(数列)
P1939 【模板】矩阵加速(数列) 题目描述 a[1]=a[2]=a[3]=1a[x]=a[x-3]+a[x-1] (x>3)求a数列的第n项对1000000007(10^9+7)取余的值。输入输出格式 输入格式: 第一行一个整数T,表示询问个数。以下T行,每行一个正整数n。输出格式: 每行输出一个非负整数表示答案。输入输出样例输入样例#1: 3 ...原创 2018-07-26 16:04:02 · 1318 阅读 · 0 评论 -
欧拉函数_互质数
什么是欧拉函数? 见 百度百科就是这样的一个函数, 在ACM里面算是一个常见内容了(虽然目前我只见过一次).那么我们定义Φ(n)为n的欧拉函数那么显然的, 如果n是质数, Φ(n) = n - 1, 如果n不是质数, 那么我们只要求出n的所有因数, 即可求出Φ(n). 这么看来求欧拉函数就是分解质因数 + 计算了.有没有更方便, 更快速的方法呢?有的! 我们可以把求欧拉函数...原创 2018-07-30 15:32:02 · 900 阅读 · 0 评论 -
倒水-二进制-lowbit函数
P1582 倒水, 传送门题目描述一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水。接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子。每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒进另一个里,然后把空瓶丢弃。(不能丢弃有水的瓶子)显然在某些情况下CC无法达到目标,比如N=3,K=1。此时CC会重新买一些新的瓶子(新瓶子容量无限,开始时有1升水...原创 2018-07-28 09:14:15 · 294 阅读 · 0 评论 -
CCF 201512-5 矩阵_50分_矩阵快速幂
CCF 201512-5 矩阵 传送门这道题看上去好像可以用变形的矩阵快速幂求解, 但是最大数据范围m = 1000,n = 100,k ≤ 1e9, 常规的算法复杂度*O(m^3*n*logk)*肯定是不可以了, 高达1e12级数. 但是较小的数据还是可以过掉的.我得了50分, 过掉了较小的数据, 在百度上没有找到有谁发出100分的代码, 自己也暂时想不出正解.这里的变形, 是矩阵...原创 2018-08-10 13:19:29 · 512 阅读 · 0 评论 -
CCF 201503-3 节日_Zeller公式
CCF 201503-3 节日 传送门一道日期相关的题目, 用Zeller公式可简化过程.思路就是通过Zeller公式获得某一年得m月1日的星期, 再根据这个星期获取该月份的第th个星期w的天数.Zeller公式: (c/4 - 2*c + y + y/4 + 13*(m + 1)/5 + d - 1)mod7但要注意的是此公式有几个坑! 那就是1月2月要当作上一年的13月14...原创 2018-08-11 11:02:30 · 435 阅读 · 1 评论 -
矩阵链乘法—DP
矩阵链乘法是这样的问题: 给定n个矩阵:A1,A2,…,An,其中Ai与Ai+1是可乘的,i=1,2…,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。我们称有如下性质的矩阵乘积链为完全括号化的(fully parenthesized):它是单一矩阵,或者是两个完全...原创 2018-09-08 20:42:16 · 652 阅读 · 0 评论 -
P2420 让我们异或吧-异或性质-树形结构
题目链接题目描述异或是一种神奇的运算,大部分人把它总结成不进位加法.在生活中…xor运算也很常见。比如,对于一个问题的回答,是为1,否为0.那么:(A是否是男生 )xor( B是否是男生)=A和B是否能够成为情侣好了,现在我们来制造和处理一些复杂的情况。比如我们将给出一颗树,它很高兴自己有N个结点。树的每条边上有一个权值。我们要进行M次询问,对于每次询问,我们想知道某两点之间的...原创 2018-09-11 11:04:11 · 323 阅读 · 0 评论 -
剑指offer之三-数据流中的中位数
问题描述对于一个数据流, 每读入一个数据, 就输出已读入数据的中位数.这道题有很多种方法.一. 暴力一点的是有序数组, 读入一个数据就将其有序化, 然后直接输出中位数. 这样插入一个数复杂度为O(n), 查找为O(1);二. 或者使用有序链表, 插入的复杂度为O(n), 查找为O(1). 为什么查找中位数可以是O(1)? 因为可以定义两个指针, 分别指向中间的两个数, 如果总数为奇数则同...原创 2018-09-25 23:14:25 · 321 阅读 · 0 评论 -
基础计算几何类/函数
这是一套基础的计算几何模板组件, 可以解决的问题有0. 内积和外积计算1. 平行和正交判定.2. 找投影点3. 找对称点4. 找距离(点与点, 点与直线, 点与线段, 线段与线段)5. 判断逆/顺时针6. 判断线段相交7. 线段的交点8. 圆与直线的交点9. 圆与圆的交点10. 点的内包11. 安德鲁算法求凸包这套算法中, 最基本的是内积和外积, 其他的实现基本是这两个数...原创 2018-09-29 16:09:35 · 241 阅读 · 0 评论 -
线段相交问题-线段扫描法-set模拟二叉树
线段相交问题: 线段扫描法预处理:对每个线段, 解析其端点信息.线段分两类, 一类与x轴平行, 作为扫描线段, 左端点记为LEFT, 右端点记为RIGHT第二类与y轴平行, 作为区间查询线段, 上端点记为TOP, 下端点记为BOTTOM对每个端点, 其类型为EndPoint, 除了存储坐标外, 还存储其线段下标以及端点类型核心步骤:给线段的端点排序, 按坐标y从小到大的顺序, 如果...原创 2018-09-29 18:47:14 · 474 阅读 · 1 评论 -
阶乘问题-最右边的非零值
问题是给出一个数n, 找出n的阶乘右边的第一个非零值.如15! = 1307674368000, 那么这个值就是8.#include <iostream>using namespace std;int main(){ int n; cin >> n; long long ans = 1; for (int i = 1; i &...原创 2018-07-25 23:40:27 · 1345 阅读 · 0 评论 -
求pi 以及 pi小数点后n位
这时IOCCC大赛上的得奖代码, 求pi, 可以精确到第56000位. 膜拜大神.#include &lt;stdio.h&gt;#define MAX_C 56000int a=10000,b,c=MAX_C,d,e,f[MAX_C+1],g;main(){for(;b-c;) f[b++]=a/5;for(;d=0,g=c*2;c -=14,printf("%.4d",e+d/a...原创 2018-07-18 22:29:17 · 3223 阅读 · 0 评论 -
大整数除法
这个大整数除法指的是求出 a 除以 b 的整数位结果, 当然余数也可以求, 但不是求精确的小数结果.举个例子来说思路:a = 17693 b = 23 求 a / blen(a) = 5, len(b) = 2那么 1. 17693 - 23000 &lt; 0, 跳过 2. 17693 - 2300*7 = 1593 3. 1593 - 230*6 = 213 4...原创 2018-07-18 21:51:59 · 10204 阅读 · 5 评论 -
方块与收纳盒_走楼梯
题目描述 现在有一个大小n*1的收纳盒,我们手里有无数个大小为1*1和2*1的小方块,我们需要用这些方块填满收纳盒,请问我们有多少种不同的方法填满这个收纳盒 输入描述: 第一行是样例数T 第2到2+T-1行每行有一个整数n(n<=80),描述每个样例中的n。 输出描述: 对于每个样例输出对应的方法数。 示例1 输入 3 1 2 ...原创 2018-01-23 18:33:23 · 371 阅读 · 0 评论 -
N柱汉诺塔问题_转载
以下内容全为转载:汉诺塔问题及其变形算法分析写在前面:本文章属于小编从网上整合而来!引言汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究。最简单的汉诺塔是三个柱子(A、B、C),因此多柱汉诺塔的柱子个数M≥3。下面从三柱汉诺塔说起,慢慢深入我们要关心的问题。三柱汉诺塔三柱汉诺塔是经典的汉诺塔问题,在算法设计中是递归算法的转载 2018-01-25 12:48:09 · 2022 阅读 · 0 评论 -
洛谷_P1962_斐波那契数列
这道题是洛谷上提高+/省选-的题目.看上去是道简单的斐波那契数列, 可是看看数据范围, 用普通的递推方式肯定超时.那么这道题该怎么做呢?标准的做法似乎是矩阵快速幂(题解提到), 然而笔者还不会, 再看题解, 发现有其他的方法. 是一个从没见过或者见过但没有印象的斐波那契数的性质f(2n) = f(n+1)^2 - f(n-1)^2; f(2n+1) = f(n+1)^2 + f...原创 2018-02-11 10:39:10 · 412 阅读 · 0 评论 -
主元素问题_奇妙的思维
主元素问题什么是主元素问题先排序比较排序后计数的方法一个简单优化计数排序的方法用STL中的nth_element函数豆瓣里一种巧妙地方法总而言之 主元素问题是一种很简单的思维启发问题 方法有很多 可是你想到了最简单的方法吗主元素问题什么是主元素问题? 已知一个数组的大小,并且其中存在一个数,出现的频率大于50%,则称其为该数组的主元素。用...原创 2018-02-13 12:00:20 · 5307 阅读 · 0 评论 -
编程实现高斯消元法
计算机计算线性方程组的解一般是用高斯消元法完成的.我写了一个简单的程序, 输入一个[(n*(n+1)]的增广矩阵, 求解各未知数的值.只能解答两种情况:1. 线性方程组有唯一解 2. 线性方程组无解时间复杂度为O(n^3).#include <iostream>#include <cmath>const double ESP = 1e-8;us...原创 2018-03-17 15:47:34 · 3226 阅读 · 0 评论 -
计算几何入门_点/向量类
这是一个平面上点或向量类, 包含了常用的向量运算如: 数乘, 点乘.三维或更高维的类可由此拓展出来. /*计算几何入门设计一个点(向量)类, 包含各种属性和操作 */#include <iostream>#include <cmath>using namespace std;class Point;typedef Point Vector;...原创 2018-03-13 20:54:36 · 313 阅读 · 0 评论 -
离散数学_C++生成真值表_模拟
生成真值表的代码输入一个真值表达式, 程序自动生成它的真值表.纯模拟思路 合取* 析取| 单条件> 双条件- 非!#include <iostream>#include <string>#include <cmath>using namespace std;int cnt = 0, chval...原创 2018-04-07 17:34:59 · 6441 阅读 · 0 评论 -
位运算_枚举子集
某君有 nn 个互不相同的正整数,现在他要从这 nn 个正整数之中无重复地选取任意个数,并仅通过加法凑出整数 XX。求某君有多少种不同的方案来凑出整数 XX。输入格式 第一行,输入两个整数 n,X(1 \leq n \leq 20, 1 \leq X \leq 2000)n,X(1≤n≤20,1≤X≤2000)。接下来输入 nn 个整数,每个整数不超过 100100。输出格式 输出...原创 2018-04-14 11:40:28 · 977 阅读 · 1 评论 -
随机数求面积_蒙特卡洛方法_阀门算法
如何求pi呢?维基百科上的pi是这样的piMOOC上介绍了两种求pi的算法一种是百科里的阀门算法 代码实现较为简单, 计算的精确度似乎很高.不得不说这个求pi的公式看上去非常优美. # -*- coding:-utf -*-from random import *pi = 0.0for i in range(0, 10000): pi += (1/pow(1...原创 2018-04-14 14:37:18 · 3193 阅读 · 0 评论 -
求组合数及组合数对p取模
两种组合数问题一: 求组合数C(n, m)方法一方法二方法三求C(n, m) % p两种组合数问题今天学了一点组合数学, 一个求组合数的算法, 一个是求组合数对p取模一: 求组合数C(n, m)方法一此方法是最粗暴的方法, 按照组合数的定义直接模拟, 不过这种方法的弊端是, 即使组合数不算大, 在它的中间过程中可是有可能溢出的. 即使是long l...原创 2018-06-01 23:31:35 · 1075 阅读 · 0 评论 -
小希的数表
【问题描述】 Gardon 昨天给小希布置了一道作业,即根据一张由不超过 5000 的 N(3<=N<=100)个正整数组成的数表两两相加得到 N*(N-1)/2 个和,然后再将它们排序。例如,如果数表里含有四个数 1,3,4,9,那么正确答案是 4,5,7,10,12,13。小希做完作业以后出去玩了一阵,可是下午回家时发现原来的那张数表不见了,好在她做出的...原创 2018-07-11 17:59:52 · 2436 阅读 · 0 评论 -
给定一个启发式函数满足h(G)=0,其中G是目标状态,证明如果h是一致的,那么它是可采纳的。
问题:给定一个启发式函数满足h(G)=0,其中G是目标状态,证明如果h是一致的,那么它是可采纳的。证明如下:假设nnn为任意状态, GGG为某目标状态, 且n,N1,N2,...,Nm,Gn, N_1, N_2, ..., N_m, Gn,N1,N2,...,Nm,G为从状态NNN到达状态GGG的一条最优路径.已知h(n)h(n)h(n)是一致的, 则满足h(n)<=c(...原创 2019-10-03 11:15:46 · 5966 阅读 · 0 评论