
-------- 数论 --------
文章平均质量分 77
u011008379
这个作者很懒,什么都没留下…
展开
-
HDU 1164
这是一道整数分解的题目,任何一个正整数都能分解成素数相乘的形式,而这道题就是要我们找出这些素数,并按照规定形式输出。先说一下一个正整数X的素因子的分布情况:1)如果X为素数,那么素因子就是X本身;2)如果X为合数,X的素因子要么全部都在[2,sqrt(x)],要么一个在[sqrt(x),X]内,其他素因子在[2,sqrt(x)]区间内。下面就第二种情况解释一下,假设有两个素因子a,b在[s原创 2014-03-01 16:35:50 · 651 阅读 · 0 评论 -
POJ 3421
因为题目里要求Xi | Xi+1,而Xm又限定为X,所以我们可以想到Xm-1是X除以其某个约数得到的,Xm-1也是一样。由此我们可以知道“X-factor Chains”是通过不断乘以X的约数得到的,为了长度最大,所以约数必须是素数。通过记录有哪些素因数,以及素因子的数量,我们就可以得到链的长度。原创 2016-04-22 22:39:44 · 826 阅读 · 0 评论 -
POJ 1930
一道很有意思的数学题,如果你之前知道方法,那么这题就不难,否则还是挺难得。我网上找了几份解题报告后,只懂过程,不懂原理。唉,先这样吧! 下面是我转载(http://www.hankcs.com/program/cpp/poj-1930-dead-fraction.html)的解题方法,看完之后大家就差不多明白了。混循环的两个例子很有代表性,一定要都看。原创 2016-04-22 15:25:03 · 727 阅读 · 0 评论 -
poj 1091
这道题意思不难理解,可以认为是求满足方程a1*X1+a2*X2+…+an*Xn=1的系数n元组(a1,a2,…,an)的个数,其中Xi的值为正值代表往左跳,为负值代表往右跳。 要解决这道题,首先要知道a1*X1+a2*X2+…+an*Xn=d有解的充分必要gcd(a1,a2,…,an)|d。因此,此题要计算出所有满足gcd(a1,a2,…,an)|1的n元组(a1,a2,…,an)的原创 2014-03-05 16:29:26 · 742 阅读 · 0 评论 -
poj 2689
这是一道关于素数的题目,不过这是运用筛法求素数的方法求解区间内的素数,是一道很好的题目,会让你对筛法求素数有更好的理解(提示:下面的讲解都建立在懂得一般筛法求素数的基础上,所以如果不会,请先学习筛法求素数的算法)。 这题要求相邻素数的最大和最小距离,但只要知道区间的所有的素数,这就很好解决了,所以解题重点在于筛法求一段区间的素数。一般筛法求素数是从2开始的一个区间,但这题左边的区原创 2014-02-26 14:22:22 · 775 阅读 · 0 评论 -
poj 2992
这是一道数论的题目,要想做出这题,只需要明白两点就行: 1)一个正整数n按素因子分解:n=p1^a1*p2^a2*....*pk^ak,那么n的约数的个数为(a1+1)(a2+1)...(ak+1); 2)对于一个素数p,n!中按素因子分解,p的幂为 n/p+n/p^2+n/p^3...,其中/为整除 随便说一下,这种方法速度很慢,时间900MS以上原创 2014-03-03 23:47:38 · 701 阅读 · 0 评论 -
poj 2417
这道题是求高次同余方程,或者说是求离散对数,不过这道题有一个很特殊的条件,模取的数p是素数。 首先,介绍一下离散对数。定义一个素数p的原根,为其各次幂产生从1 到p-1的所有整数根,也就是说,如果a是素数p的一个原根,那么数值a mod p, a^2 mod p, ..., a^( p-1) mod p是各不相同的整数,并且以某种排列方式组成了从1到p-1的所有整数。对于一个整数b和原创 2014-03-10 11:31:54 · 901 阅读 · 0 评论 -
HDU 2824
这还是与欧拉函数有关的,不过这次不是求一个,而是求多个,所以我们不能一个一个用求单个数的欧拉函数值的方法,需要用筛法求多个连续数的欧拉函数值。如果你没有看过筛法求素数,那么建议先看一下筛法求素数,这将有助于理解这道题的算法思想。后面给出的代码,会算出从2~n所有数的欧拉函数值,我们只需截取a~b范围内的欧拉函数值相加即可。首先,需要声明一个数组,并需要全部初始化为0。然后从2~n中找出原创 2014-02-18 22:51:30 · 828 阅读 · 0 评论 -
HDU 1370
这是一道有关中国剩余定理的题目。 中国剩余定理解法(摘自维基百科:维基百科-中国剩余定理):用现代数学的语言来说明的话,中国剩余定理给出了以下的一元线性同余方程组:有解的判定条件,并用构造法给出了在有解情况下解的具体形式。中国剩余定理说明:假设整数m1, m2, ... , mn两两互质,则对任意的整数:a1, a2, ... , an,原创 2014-02-21 15:29:33 · 837 阅读 · 0 评论 -
HDU 1573
这是一道杭电上的关于中国剩余定理的题目,如果你会解中国剩余定理的题目,那么这道题就难不倒你。 不过要注意两点:1)这里没说a[i]之间互素,所以要用两两合并的方法求解;2)这道题除了要求X,还要求小于等于N的正整数X的数目,所以如果求出的X正好是0,那么在计数时要有办法处理,不要多加一个1,我就没想到这个,导致计数时多了一个1,错了很多次。代码:#include #i原创 2014-02-23 00:28:44 · 721 阅读 · 0 评论 -
HDU 1061
这题是一道关于快速幂算法的题目,这道题有很多种解题方法,好像找规律也行,不过我在这里不打算讲找规律的方法(我也没找过),我主要是讲一下利用二进制来实现快速幂的方法。 例如:求a^b(不考虑超范围的问题)。先把b按二进制展开,即b=bn*2^n+......+b1*2^1+b0*2^0,所以a^b=a^(bn*2^n+......+b1*2^1+b0*2^0) =a^(bn*2^原创 2014-02-26 16:32:00 · 951 阅读 · 0 评论 -
poj 3233
这题是矩阵相乘,由于k很大,所以要借用整数快速幂(如果不会快速幂可以参看我之前的博文)的方法计算矩阵的相乘,所以方法与之前的差不多,如果这个会了,题目就不难了。这道题有更高级的方法,但是我用的是普通的方法,也能AC,适合初学者。 这道题我主要是写了矩阵相乘、相加和n次方,这不难理解。这道题用了一个小技巧,就是用struct“包装”了二维数组,这样返回矩阵和赋值将会更简单。原创 2014-02-27 23:50:04 · 677 阅读 · 0 评论 -
HDU 1452
这道题是求一个数所有因子的和,但这道题给出的数是底数相同,但指数不同,而且十分的大。 先将2004分解成素因子乘积的形式,即2004=2^2 * 3 * 167,那么2004^x=2^(2*x) * 3^x * 167^x。由数论知识可知因子和函数是一个乘性函数f(又叫积性函数),所以对于两个互素的正整数a,b,有f(a*b)=f(a)*f(b)。在这里我们可以拆成f(2004^x原创 2014-03-06 14:15:10 · 774 阅读 · 0 评论 -
poj 2407
这是一道求欧拉函数的题目,题意十分直白,就是求欧拉函数的值,不过题目里关于互素的概念说的有点绕,让我看不太懂。 欧拉函数φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数(摘自百度百科),所以找出x的素因子就可以求解了。这道题虽然n很大,不过直接算就好了,不会超时。代码原创 2014-03-06 23:24:37 · 632 阅读 · 0 评论 -
HDU 1576
这道题考察了数论中扩展的欧几里得算法,算一道较为简单的题。首先,从题目我们可以得出两个式子:1)A=xB;2)n=A%9973,由此可以推出Bx+9973y=n,其中x为正数,y为负数。然后,我们由此可以联想到用扩展的欧几里得算法算出ax+by=gcd(a,b)的解,而题目指出gcd(B,9973) = 1,降低了一些难度。如果我们求出了Bx+9973y=1中的x,则n*x%9973,就是原创 2014-02-17 13:26:46 · 821 阅读 · 2 评论 -
poj 2891
这道题也是一道中国剩余定理的题目,不过题目并没有指明 a1,a2,...,ak互素,所以不能用原来那种解法,必须通过两两合并的方式,最后合并成一个方程,便可求出答案。 解法(摘自poj 2891(一般模线性方程组)):X mod m1=r1X mod m2=r2.........X mod mn=rn首先,我们看两个式子的情况X mod m1=r1……转载 2014-02-21 23:34:52 · 775 阅读 · 0 评论 -
POJ 3292
这道题给出了H-numbers的定义——形如4*n+1的正整数,且题目里说只考虑这些数(For this problem we pretend that these are the only numbers.)。原创 2016-04-24 12:03:11 · 426 阅读 · 0 评论