-----math
文章平均质量分 82
hexiecs
Follow my heart.
展开
-
求大组合数 HIT2813
题意;给n,m,p,求C(n+m,n)%p利用阶乘的整数分解,将C写成阶乘的形式再分解成素数表达式求值。代码:#include #include #include #include #include #include#include #include #include #include #include #include #include #i原创 2015-07-17 00:08:29 · 530 阅读 · 0 评论 -
阶乘的整数分解 fzu1753
题意:给T个组合数的最大公约数。将每个组合数的素数分解式求出来,把每个素数的最小次数乘起来就是最大公约数。组合数可以写成阶乘的形式,然后利用阶乘的整数分解就可以得到组合数的整数分解。代码:#include #include #include #include #include #include#include #include #include #in原创 2015-07-17 00:05:08 · 721 阅读 · 0 评论 -
组合数学+整数分解 POJ 2992 Divisors
题意:给n,k,求C(n,k)的约数的个数。由于C(n,k)=n!/(k!*(n-k)!),所以只要分别把分子分母的素因子的次数求出来,再用分子的每个素因子的次数减去分母的每个素因子的次数就可以得到C(n,k)的素数分解式,约数个数就等于(p1+1)(p2+1)*...*(pn+1).这道题n,k的范围都是四百多,按理说O(N^2)的算法可以过的,但是测试数据太多了,暴力的方法会TLE原创 2015-07-16 19:39:46 · 856 阅读 · 0 评论 -
欧拉函数+费马定理 POJ3358
题意:给一个分数p/q,求它的小数的二进制表示的循环部分的开始位置和循环长度。对于一个十进制小数,求二进制的方法是不断的乘2取整数部分。所以首先把p/q化成最简的形式p'/q',然后对其不断乘2,直到p'*2^i == p'*2^j (mod q'),这时候循环就出现了,i是循环开始的位置,j-i是循环长度。经过变换得到:p'*2^i*(2^(j-i)-1) ==0 (mod原创 2015-07-16 19:25:26 · 1031 阅读 · 0 评论 -
POJ 2773 Happy 2006
题意:找出第k(k先找出小于等于m的数中与m互素的数,对于大于m并且与m互素的数,都是由小于m且与m互素的数加上若干个m得到的。证明如下:如果小于等于m且与m不互素的数,设为p,必然与m有大于1的最大公因子(设为r),p可以表示为p=r*a,m可以表示为m=r*b,其中a,b为整数,加上q个m后,p+q*m=r*(a+q*b),依然有大于1的公因子,所以p+q*m与m不互素。所以大于m并且原创 2015-07-14 00:30:04 · 484 阅读 · 0 评论 -
欧拉函数 素数原根 POJ 1284
这道题用到一个定理:一个奇素数p的原根个数phi(p-1),然后就求p-1的欧拉函数就好了。代码:#include #include #include #include #include #include#include #include #include #include #include #include #include #include #inc原创 2015-07-13 22:00:24 · 553 阅读 · 0 评论 -
大区间素数筛选 POJ2689
题意:给一个区间[L,U],(1由于L,U都小于2^32,所以区间内的合数的最小质因子必然小于2^16,所以先筛出2^16以内的素数,用筛出来的素数去筛[L,U]内的合数。然后把[L,U]内的素数保存下来,再搜索最近和最远的素数对即可。注意两整数相乘可能溢出32位,注意对1的判断。代码:#include #include #include #include原创 2015-07-02 12:21:25 · 1063 阅读 · 0 评论 -
大整数的素数判断,素数分解 POJ2191
题意;给一个k(k这道题需要先判断一个梅森数是不是合数,应为2^63很大,普通的素数判断方法肯定不行,需要用miller_rabin素数测试方法。如果一个数是梅森合数,用pollard_rho整数分解算法对其分解。这两个算法可以百度,有博客讲解的很详细。miller_rabin:点击打开链接;pollard_rho:点击打开链接代码:#include #inc原创 2015-07-01 20:47:23 · 2233 阅读 · 0 评论 -
素数判断+BFS POJ 3126
题意:给两个四位的素数,求出从第一个素数变为第二个素数的最短路径。每步可以变素数的一位,并且每步得到的数必须是素数。 先把素数打表,然后bfs求最短路径就可以了,如果变换后得到的数是素数,就加入队列。 代码:#include #include #include #include #include #include#include #inclu原创 2015-06-30 18:59:02 · 518 阅读 · 0 评论 -
素数判断+DFS POJ2034
题意:构造一个n到m的数的序列,使得任意连续的2个数,3个数,4个数...d个数的和都为合数。先打素数表,然后DFS搜索,对于每个数都判断它和前面的数的和是否满足条件。代码:#include #include #include #include #include #include#include #include #include #include原创 2015-06-30 16:57:35 · 848 阅读 · 0 评论 -
整数的素数分解 POJ 1365
题意:给一个整数x的素数分解形式,求出x-1的素数分解形式。先把x算出来,再把x-1素数分解就可以了,注意一下pow的精度损失代码:#include #include #include #include #include #include#include #include #include #include #include #includ原创 2015-06-30 11:14:18 · 633 阅读 · 0 评论 -
置换+DP POJ 3590
题意:求出一个长度为n的(1~n)的置换,使得置换的长度最大。置换的长度是指使他变成单位置换所需的置换次数。其实置换的长度等于它的每个循环的长度的最小公倍数,即是将n分解为k个数,使得他们的和为n并且他们的最小公倍数最大,然后根据这k个数构造一个字典序最小的置换。求最小公倍数可以用DP,dp[i][j]表示将i分解为j个数所能得到的最大的最小公倍数,那么dp[i][j]=dp[i-原创 2015-06-29 23:46:50 · 770 阅读 · 0 评论 -
置换开方 POJ3128
题意:给一个置换,判断是否是另一个置换的平方。一个置换可以表示成循环的乘积。对于长度为偶数的循环,它的平方会分裂成两个长度各位之前一半的循环。对于长度为奇数的循环,它的平方不会分裂。所以对于当前置换中长度为偶数的循环,一定是以前的置换分裂出来的,判断每个长度为偶数的循环的个数是否为偶数个即可。对于长度为奇数的循环,不用考虑。代码:#include #include #inc原创 2015-06-29 18:32:01 · 858 阅读 · 0 评论 -
逆置换 poj 1721
题意:给n张已经被洗好的卡片,他们被洗过s次,每次洗卡片操作是把a[i]换成a[a[i]],即一个置换的平方,求出卡片被放入洗牌机之前是什么样的。可以把置换循环的长度求出来,设为a,原始置换置换s次后得到当前置换,那么当前置换再置换a-s次记得到了原始置换。代码:#include #include #include #include #include #i原创 2015-06-29 17:25:46 · 2700 阅读 · 0 评论 -
数学推导+高精度进制转换+解同余方程 POJ 3708
题意:点击打开链接把m,k表示成d进制,对于这个递归函数,每一次递归都是一次每一位数字的置换,求出每一位的循环节,最终f(m)=k就是要每一位都相等,即解同余方程组。代码:#include #include #include #include #include #include#include #include #include #include #incl原创 2015-07-30 22:54:59 · 574 阅读 · 0 评论 -
hdu5399 Too Simple(函数映射)
题目:Too SimpleTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1042 Accepted Submission(s): 355Problem DescriptionRhason Cheung原创 2015-08-25 00:21:05 · 1013 阅读 · 0 评论 -
hdu 4969 Just a Joke(数学)
题目:Just a JokeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 698 Accepted Submission(s): 312Problem DescriptionHere原创 2015-09-06 00:10:29 · 420 阅读 · 0 评论 -
hdu 4965 Fast Matrix Calculation(数学)
题目:Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1107 Accepted Submission(s): 531Problem Descrip原创 2015-09-06 00:02:32 · 385 阅读 · 0 评论 -
hdu4961 Boring Sum(数学)
题目:Boring SumTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1213 Accepted Submission(s): 569Problem DescriptionNumbe原创 2015-09-05 23:57:54 · 412 阅读 · 0 评论 -
hdu 5407 CRB and Candies
题目:CRB and CandiesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 652 Accepted Submission(s): 324Problem DescriptionCRB has N原创 2015-08-31 12:18:00 · 545 阅读 · 0 评论 -
ZOJ 3497 Mistwald(矩阵快速幂)
题目:MistwaldTime Limit: 2 Seconds Memory Limit: 65536 KB In chapter 4 of the game Trails in the Sky SC, Estelle Bright and her friends are crossing Mistwald to meet their final ene原创 2015-08-29 23:00:24 · 804 阅读 · 0 评论 -
hdu1757 A Simple Math Problem(矩阵快速幂)
题目:A Simple Math ProblemTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3522 Accepted Submission(s): 2130Problem DescriptionL原创 2015-08-29 00:50:04 · 815 阅读 · 0 评论 -
hdu5387 Clock(数学水题)
题目:ClockTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 709 Accepted Submission(s): 452Problem DescriptionGive a time.(hh:mm:原创 2015-08-28 21:51:10 · 677 阅读 · 0 评论 -
hdu1588 Gauss Fibonacci(矩阵快速幂+二分求矩阵等比和)
题目:Gauss FibonacciTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2858 Accepted Submission(s): 1186Problem DescriptionWithout原创 2015-08-28 00:50:08 · 1112 阅读 · 0 评论 -
hdu1575 Tr A(矩阵快速幂)
题目:Tr ATime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3689 Accepted Submission(s): 2754Problem DescriptionA为一个方阵,则Tr A表示A的迹(原创 2015-08-28 00:37:35 · 908 阅读 · 0 评论 -
POJ 3185 The Water Bowls(高斯消元法,枚举自由变元)
题目:The Water BowlsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 5013 Accepted: 1960DescriptionThe cows have a line of 20 water bowls from which th原创 2015-08-28 00:34:41 · 1171 阅读 · 0 评论 -
POJ 1753 Flip Game(高斯消元法,枚举自由变元)
题目:Flip GameTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 34731 Accepted: 15207DescriptionFlip game is played on a rectangular 4x4 field with two-原创 2015-08-26 21:51:18 · 1427 阅读 · 1 评论 -
hdu5373 The shortest problem(模拟,数学)
题目:The shortest problemTime Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1479 Accepted Submission(s): 682Problem DescriptionIn原创 2015-08-26 22:02:12 · 505 阅读 · 0 评论 -
POJ 2065 SETI(高斯消元解模方程组)
题目:SETITime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 1693 Accepted: 1054DescriptionFor some years, quite a lot of work has been put into listening原创 2015-08-25 21:04:19 · 838 阅读 · 0 评论 -
HDU 5400 Arithmetic Sequence(数学,容斥)
题目:Arithmetic SequenceTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 938 Accepted Submission(s): 412Problem DescriptionA seq原创 2015-08-25 00:36:37 · 789 阅读 · 1 评论 -
置换群 POJ1026
题目:点击打开链接有一串密钥和一行message,求用密钥encode k次以后所得的信息。每次encode就是一次置换,只要求出每个位置经过k次置换后得到的位置就行了。而置换可以表示成循环群的乘积,在循环群里面的元素i,循环群的长度为l,那么k次置换后的位置就是(k+i)%l。代码:#include #include #include #include #原创 2015-06-28 17:25:43 · 653 阅读 · 0 评论