数论/组合数学
文章平均质量分 78
飘过的小牛
不停成长才会洞悉成功的奥妙,fighting!
展开
-
辗转相除法证明+最小公倍数证明+其他相关证明
辗转相除算法的简介 在数论中,辗转相除法(国际上一般称为Euclidean Algorithm 或 Euclid's Algorithm,即欧几里得算法)是一种求任意两个欧几里得环(Euclidean Domain)中的单位(如:整数)的最大公约数的算法。这个算法的一个重要特点就是其不需要通过分解因式来求取最大公约数。辗转相除法正因为其易操作性与易实现性而成为了计算机编程中的一个重要的求最大原创 2012-02-21 09:24:19 · 8002 阅读 · 6 评论 -
NYOJ-485 A*B Problem【九余数定理】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=485解题思路:经典的九余数定理,可以参考这篇文章:http://blog.csdn.net/niushuai666/article/details/6856109代码如下:#include#include#include#include#includeus原创 2012-03-14 20:40:26 · 1472 阅读 · 0 评论 -
Hdu-1215 七夕节【算术基本定理应用】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1215解题思路:这道题要求的就是一个整数的因子之和。但是这道题在杭电数据比较弱,各种方法都能过。暴力都能过,但是在我们OJ,只能使用优化的代码。因为数据是1-500000,暴力的话,估计得跑个几十秒。下面说下这道题的优化解法:1.素数打表,这个就不说了,基本功。2.接下来就是这个原创 2012-03-12 21:27:18 · 1749 阅读 · 0 评论 -
判定被7整除的简易方法【Martix67】
判断一个数的整除性对于某些除数来说是一件非常容易的事,比如2、3、4、5、6、8、9、10、11、12、15…… 但是对于7来说一直是一个难题,而判定是否被7整除在数字运算中又比较常用。我刚看到一种判定能否被7整除的方法,在这里写一下。 比如,我们要看86415能否被7整除。首先我们把它从个位开始往左边走两个数字一组划分开来,这样,86415就划分成8 64 15;然后,从左开转载 2012-03-03 11:11:36 · 2320 阅读 · 0 评论 -
素数与素性测试【Matrix67】
1. 素数的个数无限多(不存在最大的素数) 证明:反证法,假设存在最大的素数P,那么我们可以构造一个新的数2 * 3 * 5 * 7 * ... * P + 1(所有的素数乘起来加1)。显然这个数不能被任一素数整除(所有素数除它都余1),这说明我们找到了一个更大的素数。2. 存在任意长的一段连续数,其中的所有数都是合数(相邻素数之间的间隔任意大) 证明:当03. 所有大转载 2012-03-03 11:16:48 · 1171 阅读 · 0 评论 -
同余运算及其基本性质【Matrix67】
100除以7的余数是2,意思就是说把100个东西七个七个分成一组的话最后还剩2个。余数有一个严格的定义:假如被除数是a,除数是b(假设它们均为正整数),那么我们总能够找到一个小于b的自然数r和一个整数m,使得a=bm+r。这个r就是a除以b的余数,m被称作商。我们经常用mod来表示取余,a除以b余r就写成a mod b = r。 如果两个数a和b之差能被m整除,那么我们就说a和b对模转载 2012-03-03 11:14:11 · 2129 阅读 · 0 评论 -
POJ-1019 Number Sequence
题目链接:http://poj.org/problem?id=1019题目大意:给你一串有规律的数字,112123123412345……然后问你第k位上的数字是多少。解题思路:1.开两个数组,sum数组记录到i的数的数字的总位数(123这个数的位数为3),num数组记录从1到i的数的位数2.然后分两次查找:第一次查找要查询位数pos在sum数组中在哪个以i为止的原创 2011-10-09 15:14:56 · 2019 阅读 · 2 评论 -
NYOJ-330 一个简单的数学题
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=330解题思路:这道题可以用暴力解决,其实有数学方法。地址如下:http://wenku.baidu.com/view/56df57c708a1284ac850430d.htmlhttp://wenku.baidu.com/view/53a96582d4d8d15abe2原创 2011-11-28 19:23:41 · 2406 阅读 · 6 评论 -
HDU-1568 Fibonacci
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568解题思路:一遇到数学题就悲剧!!我了个去啊!!!啥时候才能用公式瞬秒数学题啊。。。每次都被虐。。。看了AC大神的题解才做出来,数据给到1亿,明显数组也没法存,用java也搞不定!原来就是卡递推的。。。用到了斐波那契数列的通项公式。先看对数的性质,loga(b^c)=c*lo原创 2011-11-25 21:42:54 · 4091 阅读 · 0 评论 -
HDU-1271 整数对
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1271解题思路:这道题看之后没一点思路,感觉自己跟外星来的差不多。所以就搜下解题报告,发现网上的代码也几乎一样。。估计思路太BT,没几个人做出来吧。。。。下面就稍微分析一下吧。。。。。首先假设X的第k位拿走,然后加上加上X的和正好等于N!这样的话 我们可以把X 分解成:X= a+原创 2011-11-25 20:21:21 · 4165 阅读 · 3 评论 -
HDU-2138 How many prime numbers
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2138解题思路:复习一下素数,这道题数据太BT。没法打表,只能暴力了。。。。~sqrt尽量写在外面。要不然累计时间代码如下:#include#include#include#include#includeusing namespace std;bool isprim(i原创 2011-11-25 10:25:42 · 1794 阅读 · 0 评论 -
NYOJ-452 ShippingCubes【数学】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=452解题思路:这道题是topcoder的一次比赛题目,但是数据太水,暴力可过。3层循环无压力。但是如果是正规做法,应该是先将n开3次方,因为要3个数的和最小,所以3个数越接近越好(这貌似是个定理,不过不知道名字,就是知道而已),然后,如果找到这个数,剩下的就是n/k,这时,我们原创 2012-03-15 11:15:50 · 1342 阅读 · 0 评论 -
HDU-1005 Number Sequence【矩阵二分幂】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005题目大意:给你一个递推公式,求出第n项。由于某项可能太大,所以取余7解题思路:矩阵二分幂的经典运用。代码如下:#include#include#include#include#include#includeusing namespace std;#d原创 2012-03-19 16:13:32 · 1531 阅读 · 0 评论 -
NYOJ-301 递推求值【矩阵二分幂】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=301解题思路:典型的矩阵二分幂。代码如下: #include#include#include#include#include#includeusing namespace std;#define CLR(arr, what) memset(原创 2012-03-19 16:44:42 · 1072 阅读 · 0 评论 -
NYOJ博弈系列-取石子
如果步了解博弈,请先去看看基本的博弈知识。http://blog.csdn.net/niushuai666/article/details/6638943NYOJ上博弈类题目链接:http://acm.nyist.net/JudgeOnline/keysearch.php?key=%E5%8F%96%E7%9F%B3%E5%AD%90第一个:巴什博弈题目链接原创 2012-09-21 16:48:13 · 3151 阅读 · 0 评论 -
NYOJ-34 韩信点兵【数论】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=34解题思路:刚开始学算法时候写的这道题,因为数据比较小,从10到100,所以当时是暴力枚举的。昨天看到了正确的解法:原理:1.因为这个数能被5和7整除而不能被3整除,所以肯定是5和7的倍数,也就是35k,但是我们需要保证被3除的结果是a,所以我们令k=2,这样,70k%原创 2012-04-20 07:39:33 · 3415 阅读 · 1 评论 -
NYOJ-509 因子和阶乘【素分解】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=509解题思路:对2-n素分解,然后记录最大的素因子即可。代码如下:#include#include#include#include#includeusing namespace std;const int N = 10010;int prim[N],原创 2012-04-17 22:15:46 · 1721 阅读 · 0 评论 -
NYOJ-3 多边形重心问题【计算几何】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=3解题思路:一个简单的计算几何。但是需要用到一些高中学到的向量和物理知识。我也是看了1个多小时的基础知识才A掉的。需要知道的知识点有:1.叉积和点积的区别和它们引进的用途。既然是向量,它得定义大小和方向,所以不同于常规的数字。点积和叉积都是为了解决实际意义原创 2012-04-12 15:37:21 · 9447 阅读 · 5 评论 -
NYOJ-528 找球号(三)【位运算】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=528解题思路:给你2个数,怎么判断它是否出现偶数次?对1个数异或另一个数2次等于本身。代码如下:#include#include#include#include#include#includeusing namespace std;int Sca原创 2012-04-11 19:38:17 · 2170 阅读 · 3 评论 -
NYOJ-520 最大素因子【数论】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=520解题思路:简单的模拟题,有2种思路:第一种暴力:直接找到n的最大的素因子,然后找出最大素因子在素数表中出现的位置即可。第二种:在筛素数的同时进行处理,因为第二层需要更新可以整除prim[i],即当前最大素因子,所以可以在此更新。一次打表即可。代码如下原创 2012-04-09 09:58:06 · 2684 阅读 · 1 评论 -
NYOJ-468 Fibonacci数列(三)【大素数判断】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=468解题思路:这道题考察的是大素数的判断,但是有一个知识点。可以在黑书的221页找到。就是斐波那契数列从第5项开始,如果它的项数为素数,那么它就是斐波那契素数。因为斐波那契数列为1,1,2,3,5。其实第二项为1,而1不是素数,所以不是斐波那契素数,第4项为3,虽然3和1,2互原创 2012-03-20 11:35:53 · 2888 阅读 · 0 评论 -
NYOJ-333 mdd的烦恼【欧拉函数】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=333解题思路:欧拉函数应用,但是这个题和上个不一样,不能打表算,因为n的范围为整形,数组无法存下,所以只能用最原始的素分解来写。。。代码如下:#include#include#include#includeusing namespace std;const原创 2012-03-20 11:13:22 · 1971 阅读 · 0 评论 -
NYOJ-479 Coprimes【欧拉函数】
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=479解题思路:欧拉函数打表即可。n的欧拉函数计算方法如下:先将n素分解,之后取全部素因子。则n的欧拉函数就是n*(1-/1p1)*(1-1/p2)*.....这样,当n比较小的时候,我们可以通过打表的方法计算,先将f[i]初始化为i,然后从2开始向后遍历,如果该数是素数原创 2012-03-20 10:45:28 · 1614 阅读 · 0 评论 -
大数是否为素数【费马小定理+Carmichael数判断】
作为判断一个大数是否为素数的模板。代码如下:#include#include#includeusing namespace std;long long multi(long long a,long long b,long long mod){ long long temp = a,sum = 0; while(b) { if(b&1) sum = (sum +原创 2012-03-19 20:09:57 · 6023 阅读 · 0 评论 -
POJ-3070 Fibonacci【矩阵二分幂】
题目链接:http://poj.org/problem?id=3070解题思路:矩阵二分幂,模板题~~~~~水过代码如下:#include#include#include#include#include#includeusing namespace std;#define CLR(arr, what) memset(arr, what, sizeof(a原创 2012-03-19 16:57:16 · 1586 阅读 · 0 评论 -
HDU-1443 Joseph
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1443题目大意:一共有2k个人,分别为k个好人和k个坏人,现在我们需要每隔m个人把坏人挑出来,但是条件是最后一个坏人挑出来前不能有好人被挑出来。。问最小的m是多少解题思路:典型的约瑟夫问题。这道题也不算多难,只要肯好好想,思路是一定会有的。但是实现起来确实有一定的难度,弄了2个小时,当k原创 2011-11-26 11:55:53 · 4605 阅读 · 0 评论 -
算数基本定理运用
#include#include#include#includeusing namespace std;#define N 500010int num; //素数的个数int p[500010];void fun() //素数打表{ num = 0; memset(p, 0, sizeof(p)); int res = sqrt(N * 1.0); for(int i原创 2011-11-25 14:31:32 · 1480 阅读 · 0 评论 -
HDU-1722 Cake
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1722解题思路:这个想了半天也没想出什么好的办法。。。。。。google之~~举个例子:4 6,用一个矩形来切割,其实应该是圆的。这里边界也得加上,因为首位其实是相连的。。。自己动手画下圆形的蛋糕模拟。蓝色点线表示4等分线 红色实线表示6等分线,让蛋糕(矩形)可以平分为4份需原创 2011-11-25 11:10:04 · 3268 阅读 · 4 评论 -
是男人就过8题--A New Stone Game(博弈论之SG函数)
题意:小明和小红参加一种新的取石子游戏。游戏开始时有 n 堆石子,参与游戏的两个选手轮流取走和移动石子,游戏从小明开始。在每一轮中,选手选择一个至少有一颗石子的堆,从该堆石子中拿走至少一个石子。接着,该选手可以多次地从该堆中剩下的石子中把任意多的个石子移动到任意的堆中。当然,该选原创 2011-07-28 10:03:47 · 3511 阅读 · 4 评论 -
很有意思的博弈论
一.巴什博奕(Bash Game):首先我们来玩一个比较古老的报数游戏。A和B一起报数,每个人每次最少报一个,最多报4个。轮流报数,看谁先报到30.如果不知道巴什博弈的可能会觉得这个是个有运气成分的问题,但是如果知道的人一定知道怎样一定可以赢。比如A先报数的话,那么B一定可以赢(原创 2011-07-27 19:31:31 · 6600 阅读 · 3 评论 -
康托展开
描述现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?输入第一行有一个整数n(0随后有n行,每行是一个排列;输出输出一个整数m,占一行,m表示排列是第几位;样例输入3abcdefghijklhgeb原创 2011-07-16 08:26:31 · 2010 阅读 · 0 评论 -
约瑟夫问题
有n个小孩围成一圈并一次编号,教师置顶从第m个小孩开始报数,当报到第s个小孩时,即令其出列。然后再从下一个孩子起从1开始继续报数,数到第s个小孩又令其出列,知道所有的孩子都一次出列,求小孩出列的顺序。分析:由于问题中的小孩围成一个圈,因而可以用一个环形链来表示。在此,用结构体数组原创 2011-07-26 15:51:44 · 1402 阅读 · 0 评论 -
逆康托展开
简单介绍下:这个方法还是用例子来说比较好例1 {1,2,3,4,5}的全排列,并且已经从小到大排序完毕(1)找出第96个数首先用96-1得到95用95去除4! 得到3余23用23去除3! 得到3余5用5去除2!得到2余1用1去除1!得到1余0有3个数比它小的数是4所以第一位是4有原创 2011-07-16 19:29:43 · 3933 阅读 · 1 评论 -
整数进位
求两个数在相加时需要多少次进位。输入的数字不超过9个数字。#include#include#include#includeusing namespace std;int main(){ int a, b, i, tmp, ans; while(scanf("%d原创 2011-07-26 11:52:00 · 1650 阅读 · 2 评论 -
最小公约数-辗转相除法&stein算法
欧几里德算法(辗转相除法)是计算两个数最大公约数的传统算法,他无论从理论还是从效率上都是很好的。代码如下:int Gcd(int m, int n) //辗转相除法,求最大公约数{ return m == 0 ? n : Gcd(n % m, m);}int Lcm(i原创 2011-07-15 10:10:23 · 2479 阅读 · 1 评论 -
求余数(同余定理)
现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数除10003之后的余数输入第一行有一个整数m(1随后m行每行有一个自然数n。输出输出n整除10003之后的余数,每次输出占一行。样例输入345465456541样例输出456948代码如下:/*同余定理:(原创 2011-07-14 17:19:33 · 4395 阅读 · 0 评论 -
拉丁方阵(非正交拉丁方阵)
#include#include#include#include#includeusing namespace std;int main(){ int n,i,j; int Num[20]; cout<<"请输入方阵维数 = "; cin>>n; for原创 2011-07-13 19:33:17 · 2276 阅读 · 0 评论 -
POJ 1150-The Last Non-zero Digit
题意:求排列数n,m的最后一个非零数字。下面是超时程序:#include#include#include#include#include#includeusing namespace std;int fun(int a, int b, int原创 2011-08-09 19:00:42 · 986 阅读 · 0 评论 -
POJ 2181-Jumping Cows
题目:http://poj.org/problem?id=2181大意:给你n个数,让你找出一个子序列,子序列计算的规则是:奇数次运算则加上这个数,偶数次运算就减去这个数。求这个子序列的最大值。思路:跟物理上的波一样:如果为区间最大值,则为波峰。则原创 2011-08-12 16:32:17 · 1957 阅读 · 0 评论 -
数的分解
描述找到一个最小的正整数Q,使Q的各位数的乘积等于N。输入多组测试数据。数据以EOF结尾。输入一个整数N(0 ≤ N ≤ 400)。输出输出Q,如果Q不存在则输出−1。样例输入105样例输出255思路:1.判断是否为0,为0原创 2011-08-16 10:31:48 · 1520 阅读 · 0 评论