数论
文章平均质量分 56
小鸡炖蘑菇_
stay hungry,stay foolish.
展开
-
数论知识总结
错排公式Lucas定理—组合数取模素数求解欧拉函数大数相乘反素数两直线是否相交点到直线的最短距离三分1 三分2第一类Stirling数和第二类Stirling数卡特兰数判断一个点是否在多边形内部博弈之 Nim 游戏和 sg 函数Nim博弈变形(anti-nim)博弈论重要算法:Sprague-Grundy 定理大数加法快速幂取模欧几里德与扩展欧几里德算法母函数原创 2016-05-07 16:55:24 · 585 阅读 · 0 评论 -
错排公式(转)
n各有序的元素应有n!种不同的排列。如若一个排列式的所有的元素都不在原来的位置上,则称这个排列为错排。任给一个n,求出1,2,……,n的错排个数Dn共有多少个。 递归关系式为:D(n)=(n-1)(D(n-1)+D(n-2)) D(1)=0,D(2)=1 可以得到: 错排公式为 f(n) = n![1-1/1!+1/2!-1/3!+……+(-1)^n*1/n!] 其中,n!=1*2*3*转载 2016-04-14 22:54:23 · 425 阅读 · 0 评论 -
Lucas定理---组合数取模
A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]…a[0],B=b[n]b[n-1]…b[0]。 则组合数C(A,B)与C(a[n],b[n])C(a[n-1],b[n-1])…*C(a[0],b[0]) modp同余 即:Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) 然而如果p很大c(n%p,m%p)也是会溢出的,这里要用到m!(n原创 2016-04-14 13:58:35 · 514 阅读 · 3 评论 -
判断素数的几种方法的总结
素数,又称质数,定义是:除了1和它本身以外不再有其他的除数整除。方法一按照定义,从2到n-1判断有没有能整除n的数。如果有,则不是素数,否则,是素数bool is_prime(int n){ if (n < 2){ return false; } int i; for (i = 2; i < n; i++){ if (n%i == 0)原创 2016-04-09 22:36:56 · 57393 阅读 · 9 评论 -
HDU-2138-How many prime numbers(米勒拉宾素数测试)
Problem DescriptionGive you a lot of positive integers, just to find out how many prime numbers there are. InputThere are a lot of cases. In each case, there is an integer N representing the number of原创 2015-12-22 21:04:54 · 415 阅读 · 0 评论 -
反素数深度分析 (转)
今天要我要讲的是反素数,在ACM中也算是常见的考点,那么对于搞ACM的同学来说,很有必要搞清楚它,所以接下来我会很详细地讲解。 在讲解反素数之前,我们先来看反素数的概念。 反素数的定义:对于任何正整数n,其约数个数记为f(n),例如f(6)=4,如果某个正整数n满足:对任意的正整数i(0<1<n),都有f(i)<f(n),那么称为n反素数。 从反素数的定义中可以看出两个性质: (1)一个反素转载 2016-01-27 16:47:50 · 433 阅读 · 0 评论 -
判断两条线段是否相交(三种算法)
算法1: 直接计算出两直线的交点,然后判断交点是不是在线段内,代码如下struct line{ double x1, y1, x2, y2; bool fun(line l) { double xx, yy; //两直线的交点 double k1, k2; //两直线的斜率 if (fabs(this->x1-thi原创 2016-01-23 15:50:38 · 7686 阅读 · 0 评论 -
点到线段的最短距离
点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线段最短距离时需要考虑参考点在沿线段方向的投影点是否在线段上,若在线段上才可采用点到直线距离公式,如图1所示。 图1 (a)最短距离为点P与其在线段AB上投影C之间的线段PC (b)最短距离为点P与端点B(或A)所构成的线段PB转载 2016-01-15 20:55:02 · 4540 阅读 · 5 评论 -
第一类Stirling数和第二类Stirling数
第一类Stirling数 s(p,k)s(p,k)的一个的组合学解释是:将p个物体排成k个非空循环排列的方法数。s(p,k)的递推公式: s(p,k)=(p-1)*s(p-1,k)+s(p-1,k-1) ,1<=k<=p-1边界条件:s(p,0)=0 ,p>=1 s(p,p)=1 ,p>=0递推关系的说明:考虑第p个物品,p可以单独构成一个非空循环排列,这样前p-1种物品构成k-1个非空循环排列原创 2015-12-27 15:21:10 · 617 阅读 · 0 评论 -
博弈论重要算法:Sprague-Grundy 定理(转)
源起: TopCoder srm561,550 的题目 CirclesGame 是一个博弈的问题,判断是类似于 Nim 的游戏规则,当时不会做,后来看别人代码发现了都有一个名为 sg[] 的数组,不会然后研究了一下,最后搞懂了。然后在这里总结一下,这个算法实际上可以解决一大类的博弈算法问题。题目简述: A 和 B 玩游戏,在一个平面上有若干个不相交的圆圈(但可以内含),每一步的移动是选择一个点,转载 2015-08-21 15:59:27 · 2780 阅读 · 0 评论 -
Nim博弈变形(anti-nim)
这种题与以往的博弈题的胜负条件不同,谁先走完最后一步谁输,但他也是一类Nim游戏,即为anti-nim游戏。 首先给出结论:先手胜当且仅当 ①所有堆石子数都为1且游戏的SG值为0(即有偶数个孤单堆-每堆只有1个石子数);②存在某堆石子数大于1且游戏的SG值不为0. 证明: 若所有堆都为1且SG值为0,则共有偶数堆石子,故先手胜。 i)只有一堆石子数大于1时,我们总可以对该石子操作,使操作后堆数为奇原创 2015-08-21 20:02:17 · 5677 阅读 · 0 评论 -
博弈之 Nim 游戏和 sg 函数
Nim游戏是博弈论中最经典的模型(之一?)它又有着十分简单的规则和无比优美的结论,由这个游戏开始了解博弈论恐怕是最合适不过了。Nim游戏是组合游戏(Combinatorial Games)的一种,准确来说,属于“Impartial Combinatorial Games”(以下简称ICG)。满足以下条件的游戏是ICG(可能不太严谨):1、有两名选手;2、两名选手交替对游戏进行移动(move),每次一原创 2015-08-21 20:10:27 · 615 阅读 · 0 评论 -
博弈知识汇总(转)
有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个 人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏 ,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够 取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规 定每次至少取一个,最多取m个。最后取光者得胜。显然,如果n=m+1转载 2015-08-19 21:06:38 · 417 阅读 · 0 评论 -
HDU-1023 -Train Problem II(卡特兰数)
Problem DescriptionAs we all know the Train Problem I, the boss of the Ignatius Train Station want to know if all the trains come in strict-increasing order, how many orders that all the trains can get原创 2015-12-23 16:22:37 · 1310 阅读 · 1 评论 -
约瑟夫问题的几种解法
问题来历据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个原创 2016-04-18 22:22:57 · 2641 阅读 · 1 评论 -
格雷码
格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同。 例如以下为3位元的格雷码: 000 001 011 010 110 111 101 100 。 如果要产生n位元的格雷码,那么格雷码的个数为2^n. 十进制 葛雷码 二进制 0 000 000 1 001 001 2 011原创 2016-10-19 13:52:20 · 1084 阅读 · 0 评论 -
计算逆矩阵
/** 时间复杂度 O(n^3)* 输入 a 原矩阵* c 逆矩阵* n 矩阵的阶数* * 函数说明:将原矩阵a和一个单位矩阵E作成一个大矩阵(a,E),* 用初等变换将大矩阵中的a变成E,则会得到(E,a-1)的形式*/vector<double> operator * (vector<double> a, double b){ int n = a.原创 2016-10-05 14:51:50 · 2423 阅读 · 0 评论 -
poj-1222-EXTENDED LIGHTS OUT && poj-1681-Painter's Problem
gauss消元 这道题和poj-1830类似 只不过把5*6的二维矩阵看成一维的,每一个开关会影响它周围的灯的状态。#include <iostream> #include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <cmath>#include <algorithm>#define原创 2016-10-05 10:08:15 · 287 阅读 · 0 评论 -
gauss消元
高斯消元法(或译:高斯消去法)(英语:Gaussian Elimination),是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。/* * * 函数说明 * * 将方程做成一个矩阵,再利用三种矩阵初等变换 * 得到上三角矩阵,最后回代得到解集 * * * 时间复杂度 O(n^3) *原创 2016-10-05 09:04:00 · 511 阅读 · 0 评论 -
原根
对于两个正整数gcd(a,m)=1,由欧拉定理可知,存在正整数 d ≤ m-1, 比如说欧拉函数 d=φ(m),即小于等于 m的正整数中与 m互素的正整数的个数,使得 ad≡1(mod m)。 由此,在gcd(a,m)=1时,定义 a对模m的指数 δm(a)为使 ad≡1(mod m) 成立的最小的正整数 d。由前知 δm(a) 一定小于等于 φ (m),若δm(a) = φ(m),则称a是模原创 2016-10-16 20:14:32 · 3371 阅读 · 0 评论 -
费马小定理&&欧拉定理
费马小定理费马小定理是数论中的一个定理:假如a是一个整数,p是一个质数,那么ap-a是p的倍数,可以表示为ap≡a(mod p) 如果a不是p的倍数,这个定理也可以写成 a(p-1)≡1 (mod p) 维基百科欧拉定理在数论中,欧拉定理(也称费马-欧拉定理或欧拉φ函数定理)是一个关于同余的性质。欧拉定理表明,若 n,a为正整数,且 n,a互素(即 gcd(a,n)=1),则 aφ(n)≡1(m原创 2016-10-16 19:51:04 · 649 阅读 · 0 评论 -
欧拉函数(转)
对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。例如euler(8)=4,因为1,3,5,7均和8互质。 Euler函数表达通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn为x的所有素因数,x是不为0的整数。euler(1)=1(唯一和1互质的数就是1本身)。 欧拉公式的延伸:一个数的所有质因子之和原创 2016-04-09 13:08:55 · 439 阅读 · 0 评论 -
中国剩余定理(转)
中国剩余定理介绍 在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。具体解法分三步:找出三个数:从3和5的公倍数中找出被7除余1的最小数15,从3和7的公倍数中找出被5除余1 的最小数21,最后从5和7的公倍数中找出除3余1转载 2016-10-15 20:03:57 · 336 阅读 · 0 评论 -
poj-2115 C Looooops (单变元模线性方程)
题意:利用了 k位存储系统 的数据特性进行循环。例如int型是16位的,那么int能保存2^16个数据,即最大数为65535(本题默认为无符号),当循环使得i超过65535时,则i会返回0重新开始计数,如i=65534,当i+=3时,i=1,其实就是 i=(65534+3)%(2^16)=1。有了这些思想,设对于某组数据要循环x次结束,那么本题就很容易得到方程: x=[(B-A+2^k)%2^k]原创 2016-10-15 20:00:56 · 414 阅读 · 0 评论 -
求乘法逆元
乘法逆元,是指数学领域群G中任意一个元素a,都在G中有唯一的逆元a‘,具有性质a×a’=a’×a=e,其中e为该群的单位元。(百度百科的解释,鬼才能看懂┑( ̄Д  ̄)┍)我理解的乘法逆元是,若a*b≡1(mod p),则b是a的乘法逆元,a是b的乘法逆元,b也可以写成a-1乘法逆元有什么用呢? 在取模运算中,有a*b%p=(a%p) * (b%p) 但是没有(a/b)%p=(a%p)/(b%p)原创 2016-10-25 13:31:45 · 820 阅读 · 0 评论 -
模线性方程组
先说一个故事 说秦末,刘邦的将军韩信带领1500名士兵经历了一场战斗,战死四百余人。韩信为了清点人数让士兵站成三人一排,多出来两人;站成五人一排,多出来四人;站成七人一排,多出来六人。韩信立刻就知道了剩余人数为1049人。这就是著名的韩信点兵的故事,化成数学模型就是: 韩信是为了计算的是士兵的人数,那么我们设这个人数为x。三人成排,五人成排,七人成排,即x mod 3, x mod 5, x原创 2016-05-07 22:19:01 · 3406 阅读 · 0 评论 -
欧几里德与扩展欧几里德算法
欧几里德算法欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。第一种证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a原创 2015-08-20 14:18:33 · 1559 阅读 · 0 评论 -
母函数(Generating function)详解(转)
在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。母函数可分为很多种,包括普通母函数、指数母函数、L级数、贝尔级数和狄利克雷级数。对每个序列都可以写出以上每个类型的一个母函数。构造母函数的目的一般是为了解决某个特定的问题,因此选用何种母函数视乎序列本身的特性和问题的类型转载 2015-08-19 20:53:46 · 643 阅读 · 0 评论 -
快速幂取模
问题定义:数论中经常出现的一个问题是对一个数的幂取模,也称为模取幂,即求a^b mod n。如果计算量较小,可以直接计算出a^b的值,再作模n运算。但是如果a和b的值都非常大,a^b的值用计算机难以表示,或者即使可以用大数运算的方式用计算机表示,也会因为耗时过长难以应用。基于模运算的基本性质,可以设计出一种算法,快速求解这一问题。这种方法为“快速幂取模”,也称为“反复平方法“。算法原理:算法基础在于原创 2015-08-20 15:02:22 · 546 阅读 · 0 评论 -
大数相加
以前在网上看大数相加的代码,基本上都是用字符数组写的。今天突然想试试用C++中的string能不能写,写了之后感觉比用字符串写略微简单,先上代码吧大数相加的函数void add(string &a, string &b, string &c){ int lena = a.length(), lenb = b.length(); int i, j; c = ""; s原创 2015-08-20 21:42:12 · 496 阅读 · 0 评论 -
HDU-3625-Examining the Rooms
Problem DescriptionA murder happened in the hotel. As the best detective in the town, you should examine all the N rooms of the hotel immediately. However, all the doors of the rooms are locked, and th原创 2015-12-27 15:27:56 · 529 阅读 · 0 评论 -
HDU 2501 Tiling_easy version
http://acm.hdu.edu.cn/showproblem.php?pid=2501Problem Description有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法。Input输入的第一行包含一个正整数T(T<=20),表示一共有 T组数据,接着是T行数据,每行包含一个正整数N(N<=30),表示网原创 2015-08-22 21:11:48 · 463 阅读 · 0 评论 -
SGU 102(Coprimes)
For given integer N (1<=N<=104) find amount of positive numbers not greater than N that coprime with N. Let us call two positive integers (say, A and B, for example) coprime if (and only if) their grea原创 2015-08-22 21:00:16 · 366 阅读 · 0 评论 -
zoj 2507 Let's play a game
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1507Elves from the Lothvain forest have created a very interesting game. The rules are very simple:There are two players.In the beginning the原创 2015-08-21 19:40:07 · 810 阅读 · 0 评论 -
ZOJ 3529 A Game Between Alice and Bob
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3529Alice and Bob play the following game. A series of numbers is written on the blackboard. Alice and Bob take turns choosing one of the nu原创 2015-08-21 19:32:42 · 423 阅读 · 0 评论 -
HDU 2149 Public Sale
http://acm.hdu.edu.cn/showproblem.php?pid=2149Problem Description虽然不想,但是现实总归是现实,Lele始终没有逃过退学的命运,因为他没有拿到奖学金。现在等待他的,就是像FarmJohn一样的农田生涯。要种田得有田才行,Lele听说街上正在举行一场别开生面的拍卖会,拍卖的物品正好就是一块20亩的田地。于是,Lele带上他的全部积蓄,冲往原创 2015-08-21 19:22:25 · 394 阅读 · 0 评论 -
HDU 1850 Being a Good Boy in Spring Festival
http://acm.hdu.edu.cn/showproblem.php?pid=1850Problem Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早起 给爸妈用心地做回早餐如果愿意 你还可以和爸妈说 咱们玩个小游戏吧 ACM课上学的呢~下面是一个原创 2015-08-21 19:10:18 · 472 阅读 · 0 评论 -
SGU 113 Nearly prime numbers
Nearly prime number is an integer positive number for which it is possible to find such primes P1 and P2 that given number is equal to P1*P2. There is given a sequence on N integer positive numbers, yo原创 2015-08-21 18:29:07 · 356 阅读 · 0 评论 -
ZOJ 2083 Win the Game
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2083A and B play a game. There are n lines. A and B color them by turns (A first). One can only color a segment of a line, with length 2, wh原创 2015-08-21 19:46:37 · 565 阅读 · 0 评论 -
Factorial
You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! = 1*2*…*N. For example, 5! = 120, 120 contains one zero on the trail.原创 2015-08-21 18:42:01 · 446 阅读 · 0 评论