08 2013 档案
摘要:Eddy's digital RootsTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3561 Accepted Submission(s): 2013Problem DescriptionThe digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a sin...
阅读全文
摘要:第六章 线性方程与最大公因数书上有一段是这样写的:本章就是要研究与方程 ax + by = gcd(a,b) 有关的性质和结论。解法,用欧几里德算法,也就是5.1介绍的算法。数论,都是研究整数范围之内的东西,既然是讨论整数解的问题,那么就会先考虑在何种情况下有解,在何种情况下无解。所以这里也是一样,研究的是线性方程和整数解的关系。ax + by = gcd(a,b)这个其实是特殊的形式,解法用的是欧几里德算法。对于一般形式如果对于一般形式:ax+by=c,我们可以在左边提出公因式gcd(a,b),那么得到也就是说,左边能保证是一个整数,因为x和y是我们要求的整数解,而显然有gcd(a,b)|a
阅读全文
摘要:这章讲的是 整除性与最大公因数,这里讲到了求解两个数的最大公因数,是的,就是“欧几里德算法” 其实也就是高中时候学过的 “辗转相除法”。gcd A=BxQ +R;gcd(a, b) 的性质:定理:如果a,b是不全为0的任意整数,则gcd(a, b)是a与b的线性组合{ax+by:x,y∈Z}中的最小正元素。推论1:对于任意整数a,b,如果d|a并且d|b,则d|gcd(a, b)。推论2:对于所有整数a和b以及任意非负整数n,gcd(an, bn)=n*gcd(a,b)。推论3:对所有正整数n,a和b,如果n|ab并且gcd(a, n)=1,则n|b。互质数:如果两个整数a与b只有公因数1,即
阅读全文
摘要:第四章介绍了高次幂之和和费马大定理费马大定理:n>2是整数,则方程x^n+y^n=z^n没有满足xyz≠0的整数解。这个是不定方程,它已经由英国数学家怀尔斯证明了(1995年),证明的过程是相当艰深的!也就是说除了勾股数组那样的2次幂,再高次就找不到整数解了。 1 对数论的贡献 2 17世纪初,欧洲流传着公元三世纪古希腊数学家丢番图所写的《算术》一书。l621年费马在巴黎买到此书,他利用业余时间对书中的不定方程进行了深入研究。费马将不定方程的研究限制在整数范围内,从而开始了数论这门数学分支。 3 费马在数论领域中的成果是巨大的,其中主要有: 4 费马大定理:n>2是整数,则方程x^
阅读全文
摘要:今天看第三章,勾股数组与单位圆。渐渐的对勾股数组有了一定的了解,本章的内容不多,讲的主要是单位圆上的有理数满足勾股数组的条件。给出了定理3.1本章讨论的是勾股数组与单位圆的关系,其实在这之前我一直没有考虑过关于勾股数的公式可以通过几何形式来推出,甚至没有想过勾股数可以用某种公式来表示,这就是平常缺少探索精神的表现吧。 如何将勾股数组和单位圆扯上关系呢?将a^2+b^2=c^2变形,得到(a/c)^2+(b/c)^2=1,如果把a/c看成x,b/c看成y,那么显然有x^2+y^2=1,这不就是单位圆的方程么。 那么如何通过单位圆来求勾股数组呢?试想,如果在圆上可以取到一点他的横坐标和纵坐标都是有
阅读全文
摘要:今天继续看第二章, 叫做勾股数组。看似很简单,因为勾股定理这个东西是初中甚至小学就知道的东西了。但是,看完之后才发现,每一个伟大的数学家,确实是由他们伟大的地方。勾股定理,也叫毕达哥拉斯定理。也就是勾三股四玄五。a^2 + b^2 = c^2;而勾股数组就是满足上式的三元数组如(3,4,5)书中讲到的。产生直角的粗略方法是取一根绳子,将其分成12等份,系成一个圈再蹦成一个3-4-5三角的形状。研究东西要抓住本质,是的,这里的本质是PPT,对,就是PPT, 此PPT非彼PPT,这里是本原勾股数组古代的人确实是充满了智慧。然后这里引用以为大神博客里面的内容了,看过之后确实是又有了新的体会。1 本章
阅读全文
摘要:今天《数论概论》到了。决定每天看一章,搞懂一章,两个月完全消灭。第一章——什么是数论、说也奇怪,我莫名其妙就开始研究数论了,这也许是一个好的开始吧,既然这样,为何不继续研究呢。每本书的第一章似乎都是那么的简单,其实也未必简单啦。第一章介绍了一些常见的数,奇数,偶数,平方数,立方数,素数,合数,与1同余的数与3同余的数完全数斐波那契数等等其实我又想起来什么回文数,水仙花数,完数之类的,感觉挺不错的。提到了几个典型的数论问题,提及了勾股数组(毕达哥拉斯三元组)孪生素数,形如N^2+1 的数这里讲到了一个高斯证明1+2......+100的故事高斯用的方法是两个对角线+ 主对角线 = 正方形习题1.
阅读全文
摘要:归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。 1 //将有序数组a[]和b[]合并到c[]中 2 void MemeryArray(int a[], int n, int b[], int m, int c[]) 3 { 4 int i, j, k; 5 6 ...
阅读全文
摘要:插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序)。属于稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置) 。使用插入排序为一列数字进行排序的过程分类排序算法数据结构数组最差时间复杂度最优时间复杂度平均时间
阅读全文
摘要:快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。步骤为:从数列中挑出一个元素,称为 "基准"(pivot),(定基准,有随机版本)重新排序数列,所有元素比基准值小的摆放在基准前面,所有元
阅读全文
摘要:二叉堆是一种数据结构。 ___________________________________________________________________________________________________________________________________堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全二叉树,树中每个结点与数组中存放该结点值的那个元素对应。二叉堆有两种:最大堆和最小堆(小根堆)。堆的高度堆可以被看成是一棵树,结点在堆中的高度可以被定义为从本结点到叶子结点的最长简单下降路径上边的数目;定义堆的高度为树根的高度。我们将看到,堆结构上的一..
阅读全文
摘要:时间复杂度(渐近时间复杂度的严格定义,NP问题,时间复杂度的分析方法,主定理)排序算法(平方排序算法的应用,Shell排序,快速排序,归并排序,时间复杂度下界,三种线性时间排序,外部排序)数论(整除,集合论,关系,素数,进位制,辗转相除,扩展的辗转相除,同余运算,解线性同余方程,中国剩余定理)指针(链表,搜索判重,邻接表,开散列,二叉树的表示,多叉树的表示)按位运算(and,or,xor,shl,shr,一些应用)图论(图论模型的建立,平面图,欧拉公式与五色定理,求强连通分量,求割点和桥,欧拉回路,AOV问题,AOE问题,最小生成树的三种算法,最短路的三种算法,标号法,差分约束系统,验证二分图
阅读全文
摘要:How many prime numbersProblem 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 integers to find. Each integer won’t exceed 32-bit signed integer, and each of
阅读全文
摘要:1 大家都知道,C语言的基本数据类型提供的可计算范围非常有限的 2 那么我们需要处理大数据时怎么办呢 3 其实有一种方法可以很轻松的解决这个问题 4 那就是高精度算法。 5 6 首先,我们介绍整数的高精度加法 7 8 算法的思路: 9 模拟我们在小学所学的笔算 10 (对于不足位用0补齐,如9818+13,我们认为是9818+0013) 11 假设我们要计算的两数分别是 A1 A2 A3 A4 、 B1 B2 B3 B4 12 那么我们笔算时,会列出这样的式子 13 14 A1 A2 A3 A4 15 + B1 B2 B3 B4 16 --------------...
阅读全文
摘要:约定:x%y为x取模y,即x除以y所得的余数,当x1) {//一直计算,直到指数小于或等于1 if((p%2)!=0) {// 如果指数p是奇数,则说明计算后会剩一个多余的数,那么在这里把它乘到结果中 odd*=main; //把“剩下的”乘起来 } main*=main; //主体乘方 p/=2; //指数除以2 } return main*odd; //最后把主体和“剩下的”乘起来作为结果}够完美了吗?不,还不够!看出来了吗?main是没有必要的,并且我们可以有更快的代码来判断奇数。要...
阅读全文
摘要:int prime(int n){ int i; if(n == 2) return 1; if(n%2 == 0) return 0; for(i=3; i*i 0;i++) 5 { 6 t[i]=n%10; 7 n/=10; 8 } 9 len = i;10 for(i=0,j=len-1;isqrt(i) ) prime[num++] = i; //这个prime[]是int型,跟下面讲的不同。 } 这就是最一般的求解n以内素数的算法。复杂度是o(n*sqrt(n)),...
阅读全文
摘要:问题: 将所有回文数从小到大排列,求第N个回文数。 一个正数如果顺着和反过来都是一样的(如13431,反过来也是13431),就称为回文数。约束: 回文数不能以0开头。 最小回文数是1。思路: 许多朋友(包括我自己)一开始就思考使用循环:从1开始,判断该数是否是回文数,然后用一个计数器记下回文数,一直到计数器得到N,返回第N个回文数。比较常用的是以下这种方法来判断是否回文数:staticbooleanisPN(intnum){into=num;inttmp=0;//使用循环把数字顺序反转while(num!=0){tmp*=10;tmp+=num%10;num/=10;}//如果原始数与反转后
阅读全文
摘要:这题在DFS的同时必须考虑剪枝,,给出三个别人的代码,一个耗时7秒多,一个2秒多,最后一个只有46MS,相差甚大,都是剪枝的功劳。 1 #include 2 #include 3 const int MAX =1002; 4 bool flag = false; 5 bool vist[MAX][MAX]; 6 int s,e,map[MAX][MAX]; 7 int dir[5][3]={{1,0},{0,1},{-1,0},{0,-1}}; 8 void DFS(int x,int y,int cnt,int d) 9 {10 if(cnt>2||vist[x][y]||fla...
阅读全文
摘要:深度优先算法入门的一道非常好的题目,还考虑到了剪枝http://acm.hdu.edu.cn/showproblem.php?pid=1010 1 //这个代码是没有考虑任何剪枝的 2 //将所以情况都遍历了一遍, 3 //提交的时候是会超时的 Time Limit Exceeded 4 #include 5 #include 6 using namespace std; 7 8 #define MAX 10 9 char mapz[MAX][MAX];10 int N,M,T;11 int dx, dy;12 bool escape;13 14 void dfs(int sx, int ..
阅读全文
摘要:C语言的初学者经常会问一些貌似“专业”的问题,比如#includemain(){inti=5;intj=++i+++i+++i;printf("%d\n",j);system("pause");}这样的问题实在不需要多做考虑,而且应该在实际编程实践中尽量避免。因为它们几乎都是“未指明的行为”或“由实现定义的行为”。另一方面,程序的错误或Bugs,通常是由于“未定义的行为”。C++Primer第四版中的解释:使用了未定义行为的程序都是错误的,即使程序能够运行,也只是巧合。未定义行为源于编译器不能检测到的程序错误或太麻烦以至无法检测的错误。不幸的是,含有未定
阅读全文
摘要:你认为为什么C++不叫做++C?看到这个习题,顿感眼前一亮(不禁想起某些国内书籍的题目,真是平淡如水),这对于理解前自增操作与后自增操作而言着实是个好的题目。想弄明白这个问题,就需要先理解一些基础的概念。什么是自增操作呢?++操作符,即自增操作符。自增操作符有两种形式:前置操作和后置操作。前自增操作生成左值,在给操作数加1后返回改变后的操作数值。后自增操作生成右值,给操作数加1但返回未改变的操作数原值。*事实上,因为C++具有操作符重载的功能,自增操作不仅仅可以表示加1前置操作返回的是加1后的值,返回的是对象本身,所以这是左值。后置操作返回的是加1前的值,其返回值可以近似的理解为与原操作数值相
阅读全文
摘要:1、动态申请一维内存(1)、用malloc函数#include #include #include int main(){ int n=5; int *temp; temp=(int*)malloc(sizeof(int)*n); for(int i=0;iusing namespace std;int main(){ int n=5; int *temp; temp=new int[n]; for(int i=0;i#include #include int main(){ int n=5; //n表示行 int **temp...
阅读全文
摘要://译题//★Prime Cryptarithm 牛式下面是一个乘法竖式,如果用我们给定的那几个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式. * * *x * * ------- * * ** * *-------* * * *数字只能取代*,当然第一位不能为0.写一个程序找出所有的牛式.PROGRAM NAME: crypt1INPUT FORMATLine 1: 数字的个数.Line 2: N 个用空格分开的数字(每个数字都∈{1,2,3,4,5,6,7,8,9}) .SAMPLE INPUT (file crypt1.in)52 3 4 6 8OUTPUT ...
阅读全文
摘要://译题//★Calf Flac 最长的回文据说如果你给无限只母牛和无限台巨型便携式电脑(有非常大的键盘),那么母牛们会制造出世上最棒的回文.你的工作就是去这些牛制造的奇观中寻找最长的回文.寻找回文时不用理睬那些标点符号、空格(但应该保留下来以便做为答案输出),只用考虑字母'A'-'Z'和'a'-'z'.要你寻找的最长的回文的文章是一个不超过20,000 个字符的字符串.我们将保证最长的回文不会超过2,000 个字符(在除去标点符号、空格之前).PROGRAM NAME: calfflacINPUT FORMAT一个不超过20,0
阅读全文
摘要://译题//★Barn Repair 修理牛棚在一个暴风雨的夜晚,农民约翰的牛棚的屋顶、门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 剩下的牛一个紧挨着另一个被排成一行来过夜. 有些牛棚里有牛,有些没有. 所有的牛棚有相同的宽度. 自门遗失以后,农民约翰很快在牛棚之前竖立起新的木板. 他的新木材供应者将会供应他任何他想要的长度,但是供应者只能提供有限数目的木板. 农民约翰想将他购买的木板总长度减到最少. 给出 M(1#includeint comp(const void *a, const void *b){ return *(int *)a -*(int *)b;}int tm...
阅读全文
摘要://译题//★Mixing Milk 混合牛奶牛奶包装是一个如此低利润的生意,所以尽可能低的控制初级产品(牛奶)的价格变的十分重要.请帮助快乐的牛奶制造者(Merry Milk Makers)以可能的最廉价的方式取得他们所需的牛奶.快乐的牛奶制造公司从一些农民那购买牛奶,每个农民卖给牛奶制造公司的价格不一定相同.而且,如一只母牛一天只能生产一定量的牛奶,农民每一天只有一定量的牛奶可以卖.每天,快乐的牛奶制造者从每个农民那购买一定量的牛奶,少于或等于农民所能提供的最大值.给出快乐牛奶制造者的每日的牛奶需求,连同每个农民的可提供的牛奶量和每加仑的价格,请计算快乐的牛奶制造者所要付出钱的最小值.注意
阅读全文

浙公网安备 33010602011771号