----- 数 学 -----
ITCharge
高效率编程,慢节奏生活。
展开
-
UVA-11300 - Spreading the Wealth-2014年4月18日173335
F. Spreading the Wealth ProblemA Communist regime is trying to redistribute wealth in a village. They have have decided to sit everyone around a circular table. First, everyone has converted原创 2014-04-19 17:43:13 · 916 阅读 · 0 评论 -
UVA-1388 - Graveyard-2014年4月20日021827
Programming contests became so popular in the year 2397 that the governor of New Earck -- the largest human-inhabited planet of the galaxy -- opened a special Alley of Contestant Memories (ACM) at the原创 2014-04-24 21:23:33 · 842 阅读 · 0 评论 -
HDU2552_三足鼎立【数学证明】
题目大意:给你一个公式,和其中的s,u的值,根据公式计算出v的值,最后输出 v*u-s*u-s*v 的值思路:直接按题意做也可以找规律证明结论根据arctan(1/s) = arctan(1/u)+arctan(1/v)arctan(1/v) = arctan(1/s) - arctan(1/u)tan(arctan(1/s) - arctan(1/u)) = 1/vtan(arctan(1/s))-tan(arctan(1/u)) = 1/v1+tan(arctan(1/s原创 2014-10-19 21:10:36 · 1025 阅读 · 1 评论 -
HDU1330_Deck【水题】
题目大意:在桌子边上叠纸牌,使纸牌超出桌边的长度最长,并且不能掉下去。即重心最多在桌子边缘上,问给你N张纸牌,最长能超出桌子边缘多长。思路:这道题和POJ1607是一样的,需要用到物理学力矩的原理,作为一个物理不好的弱渣来说真是无解啊。参考博客:http://gd2011.teacher.com.cn/UserLog/UserLogComment.aspx?UserlogID=15319和http://www.cnblogs.com/rainydays/archive/2013/01/16/286原创 2014-11-21 21:02:38 · 1601 阅读 · 0 评论 -
POJ1284_Primitive Roots【欧拉函数】
题目大意:p是奇素数,如果{x^i % p | 1 <= i <= p - 1} = {1,2,...,p-1},则称x是p的原根。给出一个p,问它的原根有多少个。思路: {x^i% p | 1 <= i <= p - 1} = {1,2,...,p-1} 等价于 {x^i%(p-1) | 1 <= i <= p - 1} = {0,1,2,...,p-2},即{x^1,x^2,x^3,…,x^(p-1)}为p的完全剩余系等价于若x与p-1互质(gcd(x, p-1) = 1),则{x^0,x原创 2014-10-15 18:48:23 · 1039 阅读 · 0 评论 -
HDU2710_Max Factor【水题】【筛法求素数】
题目大意:给你N个数,求这N个数中哪个数的最大素因子最大,输出这个数,如果有多种结果,输出靠前边的那个数。思路:将筛法求素数改变一下。若i为素数,则i的1、2、3…倍的最大素因子都为i,筛的时候,赋值为Prime[j] = i,即j的最大素因子为i。注意:初始化时令所有数为0,Prime[0] = Prime[1] = 1。即Prime[i]为0是素数,Prime[i]为1为素数。改变之后Prime[i]为i的最大素因子。原创 2014-12-06 23:24:26 · 1453 阅读 · 0 评论 -
POJ1730_Perfect Pth Powers【水题】
题目大意:对于一些整数b,n = b^p,(b为正整数)若p最大时,n为完美平方数给你一个数n,求使n为完美平方数时,最大的p值思路:p从31到1遍历,求n的p次开方,转为int型的t,再求t的p次方,转为int型的x若x和n相等,则求得的p为最大值,break出循环注意:求n的p次开方用pow()求,因为pow()函数得到的为double型,而double型数据精度问题,比如4可表示为3.99999……或4.0000001,所以转为int型时+0.1原创 2014-09-23 09:48:27 · 2110 阅读 · 0 评论 -
POJ2262_Goldbach's Conjecture【素数判断】【水题】
题目大意:给你一个数n,拆分成两个奇素数相加的形式,另这两个素数的距离最大思路:从三开始枚举奇数,判断数i和n-i是否都为素数,若为素数则输出结果。原创 2014-09-24 08:51:36 · 1190 阅读 · 0 评论 -
POJ2429_GCD & LCM Inverse【Miller Rabin素数测试】【Pollar Rho整数分解】
GCD & LCM Inverse题目大意:给你两个数a和b的最大公约数和最小公倍数,求a和b(其中在满足条件的情况下,使a+b尽量小)思路:最大公约数和最小公倍数的规模为2^63,暴力果断不行。已知a*b = L(最小公倍数)*G(最大公约数);设p = L/a,q = L/b,s = L/G;即p、q为a和b除去最大公约数的部分,且两者互质;GCD(p,q) = 1,LCM(p,q) = p * q = L*L/(a*b) = L*L/(L*G) = L/G = s。LCM(p,q)原创 2014-10-15 17:27:02 · 1732 阅读 · 0 评论 -
POJ2407_Relatives【欧拉phi函数】【基本】
POJ2407_Relatives【欧拉phi函数】【基本】题目大意:给你一个正整数N,求在小于N的范围内,有多少个正整数与N互质?思路:典型的欧拉phi函数欧拉函数(摘自百度百科):在数论,对正整数n,欧拉函数φ(n)是少于或等于n的数中与n互质的数的数目。φ(n) = n(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。 (注意:每种质原创 2014-10-15 18:23:25 · 1567 阅读 · 0 评论 -
HDU2136_Largest prime factor【水题】【筛法求素数】
题目大意:每个素数在素数表中都有一个序号,设1的序号为0,则2的序号为1,3的序号为2,5的序号为3,以此类推。现在要求输出所给定的数n的最大质因子的序号,0<n<1000000。思路:巧用素数打表法。用sum计算素数的序号,将素数连同他的倍数一起置为它的素数序号,从小到大循环,这样数组里存放的序号就是最大素数因子的序号了。注意:初始化时令所有数为0,Prime[0] = Prime[1] = 1。即Prime[i]为0是素数,Prime[i]为1为素数。改变之后Prime[i]为数i的最大原创 2014-12-06 23:31:59 · 2078 阅读 · 0 评论 -
HDU4548_美素数【水题】【筛法求素数】
题目大意:求一个区间[L,R]之间的美素数有多少个思路:先用Prime数组存储用筛法求素数的结果。再用MeiPrime[i]存储从1到i总共有多少美素数最后结果为MeiPrime[R+1]-MerPrime[L]。原创 2014-12-06 23:13:46 · 1184 阅读 · 0 评论 -
POJ3518_Prime Gap【素数】【水题】
POJ3518_Prime Gap【素数】【水题】原创 2014-09-19 06:21:37 · 2126 阅读 · 0 评论 -
POJ3641_Pseudoprime numbers【快速幂】【伪素数】
题目大意:费马定理:a^p = a(mod p) (a为大于1的整数,p为素数),一些非素数p,同样也符合上边的定理,这样的p被称作基于a的伪素数,给你p和a,判断p是否是基于a的伪素数思路:很简单的快速幂取余+素性判断 如果p为素数,则直接输出no如果p不为素数,则进行快速幂取余判断是否为伪素数,若是,输出yes,不是,输出no原创 2014-09-23 06:51:17 · 1406 阅读 · 0 评论 -
POJ1811_Prime Test【Miller Rabin素数测试】【Pollar Rho整数分解】
题目大意:T组数据,对于输入的N,若N为素数,输出“Prime”,否则输出N的最小素因子思路:因为N的规模为2^54所以普通的素性判断果断过不了。要用Miller Rabin素数测试来做。而若N不为素数,则需要对N进行素因子分解。因为N为大数,考虑用Pollar Rho整数分解来做。原创 2014-10-15 09:47:23 · 1920 阅读 · 0 评论 -
HDU1395_2^x mod n = 1【数论】【水题】
题目大意:给你一个数N,判断是否存在x,满足2^x mod N = 1。若满足,对于满足条件的最小x,输出2^x mod N = 1,否则输出2^? mod 2 = 1。思路:用到数论上的乘法逆元的规律了。乘法逆元:对于整数a、p如果存在整数b,满足a*b mod p = 1,则称b是a的模p的乘法逆元。a存在模p的乘法逆元的充要条件是gcd(a,p) = 1此题中,令a = 2^x,b = 1,p = n,则若存在x使得2^x mod N = 1,则gcd(2^x,N) = 1。1>.因为原创 2014-11-27 16:33:02 · 1707 阅读 · 0 评论 -
HDU2114 Calculate S(n)【数学】【水题】
题目大意:计算1~N的立方和思路:1~N的立方和公式为S(N) = 1^3 + 2^3 + 3^3 + … + N^3 = N^2*(N+1)^2/4。然后题目要求后四位,取余即可。原创 2015-01-28 21:17:37 · 1358 阅读 · 0 评论 -
HDU1163【九余数定理】【水题】
Eddy's digital Roots题目大意:给你一个正整数n,把n的各位上数字加起来,如果结果小于10,则所得结果为n的数字根,如果大于10,则再把上边所得结果各位上的数字加起来。现在给你一个数n,求n^n的数字根思路:一看数据规模10000^10000,肯定要把n拆分掉。通过找规律发现,求n^n的数字根可转化为先求n的数字根a,然后求a*n的原根,赋给a,接着依次求a*n,求n-1次,就得到了n^n的数字根。例如:求5^5的数字第一种方法:5^5 = 3125 3 + 1 + 2原创 2014-10-13 08:26:31 · 2069 阅读 · 0 评论 -
HDU1061_Rightmost Digit【快速幂取余】
题目大意:给你一个N,计算N^N个位上的数字是多少思路:普通方法超时,利用快速幂取余计算N^N%10,这里贴一个二进制快速幂取余的代码原创 2014-10-28 22:39:52 · 1070 阅读 · 0 评论 -
POJ2739_Sum of Consecutive Prime Numbers【筛法求素数】【枚举】
POJ2739_Sum of Consecutive Prime Numbers【筛法求素数】【枚举】原创 2014-09-18 22:44:15 · 1122 阅读 · 0 评论 -
POJ2909_Goldbach's Conjecture【素数判断】【水题】
题目大意:给出一个偶数,要求在这个偶数的范围内,有几对素数和是等于这个偶数的注意素数对的不重复性! 比如 n = a + b(a,b为素数) 则n = b + a 就重复了思路:只需要枚举2到n/2的数i,判断i和n-i是否都为素数,并计数就可以了原创 2014-09-24 09:01:44 · 1786 阅读 · 1 评论 -
POJ3090_Visible Lattice Points【欧拉函数】
POJ3090_Visible Lattice Points【欧拉函数】题目大意:现在有一个二维坐标系,只有离散的整数坐标上有点。现在站在N点向周围看去。问能看到多少个点。假如看到了(2,1),那么(2,1)后边的(4,2)(6,3)…就被挡住看不到了。考虑1*1的时候,有三个点(1,0)(1,1)(0,1)。(1,0)和(0,1)关于(1,1)对称再看2*2的时候,有个点(1,0)(1,1)(2,1)(0,1)(1,2)(1,0)和(0,1)关于(1,1)对称(2,1)和(1,2)关于(原创 2014-10-16 09:06:27 · 1284 阅读 · 0 评论 -
HDU1164_Eddy's research I【Miller Rabin素数测试】【Pollar Rho整数分解】
题目大意:任意一个数x,都可以被分解为几个素数(可以相同)相乘的形式,现在给你一个数x,把它分解为几个素数相乘的形式。思路:这里x的规模最大为65535,所以用简单的素性判断方法直接暴力也可以过。网上贴的代码大多简单,这里贴一个用【Miller Rabin素数测试】+【Pollar Rho整数分解】来做的代码原创 2014-10-29 14:54:12 · 1071 阅读 · 0 评论 -
POJ2689_Prime Distance【素数】【两次筛法】
题目大意:给你一个区间【L,U】,求出从L到U之间素数序列中,连续两个素数差值最大的最小的两对素数对,但其中(1<=L< U<=2,147,483,647),但区间【L,U】距离不超过1000000思路:因为L,U的值太大了,普通素性判断和素数筛法都不可行,所以可以考虑先筛选一次,筛出50000以内的素数,然后用50000以内的素数再次筛选出区间【L,U】的素数。第一次素数筛法比较简单,主要是第二次筛法,分别判断【L,U】中每个数是50000以内的素数的多少倍,若为1倍,则从2倍开始筛选。若不为原创 2014-09-24 22:20:57 · 1272 阅读 · 0 评论 -
HDU2139 Calculate the formula【水题】
题目大意:给你一个奇数N,求1~N中奇数的平方和。思路:直接暴力超时了,所以用公式来做 S = N*(N+1)*(N+2)/6,因为结果不超int型,但是中间过程会超一些,所以用__int64来做就可以了。注意cin、cout会超时,用scanf和printf就可以了。原创 2015-01-29 22:13:09 · 1216 阅读 · 0 评论 -
POJ3750_小孩报数问题【约瑟夫环】【string】【list】
题目大意:题意很明确,就是约瑟夫环。不过从第W个位置开始计数1,数S个位置,然后出环,输出。思路:用STL里边的string存放小孩的名字。用list双向链表模拟约瑟夫环。注意:string里边clear();用来清除所有字符。list里push_back(i);用来将编号i放入listbegin();指向第一个元素的位置end();指向最后一个元素后边的位置list<int>::iterator it;迭代器用来指向报数编号。find(first,last,value);用来在区间[fi原创 2014-12-06 18:10:54 · 1391 阅读 · 0 评论 -
HDU2519 新生晚会【水题】【组合数】
题目大意:给你两个数N和M,求组合数C(N,M)。思路:求组合数很容易超范围,此题应该用__int64来做,并且循环的时候,在乘的同时开始除。原创 2015-02-01 08:50:54 · 1269 阅读 · 4 评论 -
HDU2401 Baskets of Gold Coins【水题】【推理】
题目大意:有N个篮子,编号为1~N,篮子理由很多金币,只有一个篮子中每个金币中w-d,其他篮子中每个金币都重w。现在从第1个篮子里拿1个金币,从第2个篮子里拿2个金币,…,一直到到第N-1个篮子里拿N-1个金币。第N个篮子不拿。给出这些金币的全部重量和all,问:第几个篮子里的金币是轻的,求出轻金币的个数。思路:数学题,1~N个篮子里金币应有的总重量为:(N-1)*N/2*w,减去这些金币的全部重量和all,得到总的轻金币比普通金币差的重量,每个轻金币和普通金币差的重量为d,两者相除,得出轻金币原创 2015-01-31 13:35:55 · 1963 阅读 · 0 评论 -
HDU2710 Max Factor【水题】【素因子】
题目大意:给你N个数,找出这N个数拥有最大素因子的那个数。思路:筛法求素数的方法求出所有20000范围内所有数最大的素因子,然后遍历N个数,找出最大的即可。原创 2015-02-01 09:27:04 · 2816 阅读 · 0 评论 -
HDU1785 You Are All Excellent【余弦】【水题】
题目大意:给你几个队员的坐标点,已知坐标向量与x正向的夹角越小队员能力越大,能力从大到小输出队员的坐标点。思路:刚开始想用正弦,但是,x = 0的时候会错。所以要用余弦比较。但是不知到为什么C++提交就对,G++提交就错原创 2014-12-24 07:19:36 · 1057 阅读 · 0 评论 -
HDU3089 Josephus again【约瑟夫】【优化】
题目大意:有N个人,编号为1~N,按顺时针围成一个圈,每数k个人,就将这个人从圈中消除,问:最终只留下一个人的编号。思路:因为N的规模是10^12,所以直接模拟或者是普通递推O(N)都会超时。这里进行一下优化。具体参考博客:http://www.acmerblog.com/hdu-3089-josephus-again-4869.html网上已经优化好的递推式为:num = 0;for(int i = 2; i <= n; i++) num = (num + m) % i;当i很大,原创 2014-12-09 20:31:03 · 1880 阅读 · 1 评论 -
NEFU115 斐波那契的整除 【整除】
题目大意:斐波那契数列有如下递归定义,f(1)=1,f(2)=1, 且n>=3,f(n)=f(n-1)+f(n-2),它的前几项可以表示为1, 1,2 ,3 ,5 ,8,13,21,34…,问题是:若 f(n)能被3整除,则输出“3”; 若f(n) 能被4整除,则输出“4”;如果能被12整除,输出“YES”;否则输出“NO”。思路:若f(n)能被12整除,则f(n)肯定能被3和4整除,这时候输出"YES",如果f(n)不能被12整除了,再判断f(n)能被3整除,还是被4整除。都不满足了,再输出原创 2015-02-02 20:37:50 · 1447 阅读 · 0 评论 -
NEFU117 素数个数的位数【素数定理】
题目大意:给你一个整数N(1 < N < 1000000000),如果小于10^N的整数中素数的个数为π(N),那么问题来了:求π(N)的位数是多少。思路:素数的个数π(N)有素数定理可得:π(N) = N/ln(N)。本题中π(10^N) = 10^N/ln(10^N)。问题就转换为:求N^10*ln(N^10)共有多少位。设共有x位,可得 10^x = 10^N/ln(10^N)。对两边同时取对数log10,得: 10^x = N^10 / ln(N^10) l原创 2015-02-02 22:00:11 · 1144 阅读 · 0 评论 -
NEFU118 n!后面有多少个0【算术基本定理】
题目大意:问:计算N!末尾0的个数。(1 <= N <= 1000000000)。思路:N是100000000规模的数,直接计算结果,再统计0的个数显然不科学。将末尾0分解为2*5。每一个0必然和一个因子5对应,但是一个数的因式分解中一个因子5不一定对应一个0。因为还需要一个因子2,才能实现一一对应。对于N!,在因式分解中,因子2的个数明显大于因子5的个数。所以如果存在一个因子5,那么必然对应着N!末尾的一个0。这道题就变为了求N!中因子5的个数。由算术基本定理的性质(5)可知:N!在素因原创 2015-02-03 22:49:08 · 1122 阅读 · 0 评论 -
POJ1595_Prime Cuts【素数】【水题】
题目大意:给你两个数N和C,算出1~N(包括N)之间的素数序列,若素数个数为奇数,则输出素数序列中心的2*C-1个素数。若素数个数为偶数,则输出素数序列中心的2*C个素数。输出个数中说若C>素数个数,则输出整个素数序列。思路:筛法求素数打表,之后求出素数序列的中心位置,判断奇偶并输出注意:此题中,1被当做了质数(只限本题),数据规模开成1000是不够的,需要开成1100,应该是测试数据超范围了。原创 2014-09-19 06:37:29 · 1779 阅读 · 0 评论 -
HDU2078 复习时间【水题】【数学】
题目大意:给你N个数,最多取M个数,将M个数从大到小排列,求相邻的平方差(第一个数平方差是该数与100的差),使得平方差和最大。思路:其实,没那么复杂。从N个数中取1~M个数。只取一个最小值,得(100-Min)^2就可以了。很坑的题。。。。。原创 2015-01-15 21:53:38 · 1210 阅读 · 0 评论 -
NEFU119 组合素数【算术基本定理】
题目大意:给你两个整数N和P,求出C(2*N,N)被素数p整数的次数。思路:由算术基本定理的性质(5)可得到N!被素数P整除的次数。来看这道题,C(2*N,N) = (2*N)! / (N! * N!)。最终结果就是从(2*N)!能被素数P整除的次数里边减去N!能被素数整除的次数*2。最终结果为:[2*N/P] + [2*N/P^2] + … + [2*N/P^t] - 2*([N/P] + [N/P^2] + … + [N/P^t])。其中次数t = logP(2*N),即log10(2*原创 2015-02-04 22:31:47 · 1143 阅读 · 0 评论 -
HDU2092 整数解【水题】【数学】
题目大意:给你整数x和y的和以及x和y的积,是否能找到满足这两个式子的整数x和整数y。能找到输出Yes,否则输出No思路:设x+y = n,x*y = m,已知n、m,将第二个式子代入第一个式子,x+m/x = n,即x^2 +m = n*x,即x^2 - n*x + m = 0。转换为一个一元二次方程,判断一个一元二次方程是否有整数解。需要先判断是否有实数解。即b^2-4*a*c是否大于等于0。再判断(-b±√4*a*c)/(2*a)是否为整数。题目里b^2-4*a*c就是 n*n-4*m。设原创 2014-12-07 16:19:21 · 1271 阅读 · 0 评论 -
UVA130 HDU1628 Roman Roulette【vector】【约瑟夫问题】
题目大意:题目非常难理解。N个人排成一个圈,按顺时针从1到N编号。从1开始顺时针数k个人,第k个人出圈(被杀者),从出圈的下一个人开始再数k个人,第k个人(埋葬着)移到刚才出圈人(被杀者)的位置上。然后从刚才出圈人(即现在埋葬者站的位置上),从出圈者下一个人继续开始数k个人……,重复这个过程,直到只剩下一个人。例如当N=5,k=2时。刚开始为:1 2 3 4 5第一次从1开始数,2出圈,4到2的位置上。变为 1 4 3 5。第二次从3开始数,5出圈,4到5的位置上。变为 1 3 4。第三次从1原创 2014-12-08 23:24:34 · 1788 阅读 · 0 评论 -
HDU2098 分拆素数和【水题】【筛法求素数】
思路:用筛法求素数求出10000以内的素数,遍历2~N/2,直接判断i和N-i是否都为素数,并且i和N-1不相等。如果满足条件,则总数加1。最终得到结果。原创 2015-01-20 14:11:46 · 1440 阅读 · 0 评论