HDOJ3977-Evil teacher-斐波拉契数列模p循环节.doc

HDOJ3977-Evil teacher-斐波拉契数列模p循环节.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
HDOJ3977-Evil teacher-斐波拉契数列模p循环节

/showproblem.php?pid=3977 问题:斐波拉契数列模p的循环节长度 1 本原0位 首先,当斐波拉契数列出现连续1,0时即意味着开始了循环,因为接下来的项为1,1。例如%4,1 1 2 3 1 0 (循环开始)|1 1?2 3 1 0|1 1 2 3 1 0...一个很显然的性质,如果在第pos位第一次出现了(0,1),那么对于以后的(0,1)都可以表示成pos*k。因为是循环哦亲……反过来,如果在某个pos位是(0,1),那么第一个(0,1)的位置一定是pos的因子(定理1)。 如果斐波拉契数列在k位置出现了第一个%p=0,设0之前的那个斐波拉契项%p=a,那么接下来的k个斐波拉契数列f(k+i)=(a*f(i))%p(ik),变形得到f(i)=((a^j)*f(i-j*k))%p(式1)。道理也很简单,a,0,a*1,a*1,a*2,a*3,a*5...这就是一个系数为a的斐波拉契数列。我们把0前面的数为a的0位定义为?a-0位。 比如说p=5,|1 1 2 3 0|3?3?1?4 0|4?4?3?2?0|2 2 4 1?0。后面的5项总等于前面5项乘3。 因为0乘以任何数等于0,所以由式1得到f(i)是0那么f(k*i)也是0。如果f(i)=0且i不整除j(j满足f(j)=0),则称i是一个本原0位。例如p=5中的5就是一个本原0位,10就不是(10=2*5)。 那么,对于任意一个模数p是否只有一个本原0位呢? 对于模数p是质数的时候,这个定理显然。设第一个本原0位为a-0位。显然其之前的数字都不是0,也就是说不包含p因子(否则就是0了)。当然a也不含p因子,而之后的数字都形如a^k*f(i)(式1),都是一些不含p因子的数相乘,当然不会含p因子,也就有%p!=0了,所以只有一个本原0位。 当模数不为质数的时候: 先证明另一个东西,斐波拉契数列连续的两项的gcd=1。 因为gcd(a,b)=gcd(a,a-b)所以gcd(f(i),f(i-1))=gcd(f(i-1),f(i-2)=f(i)-f(i-1))=gcd(f(i-2),f(i-3))..=gcd(f(2),f(1))=1。 对于任意a-0位的项含有所有p的质因子(不然肿么会%p=0),所以a不含所有p的质因子。所以a与p互质。 对于%p下的任意的a-0位,有gcd(a,p)=1。(引理1) 又因为第一个本原0位的前面%p均不是0,也就是不含p所有的质因子。这些数乘上a(式1),当然不会变为含有所有p质因子的数,所以仍然不是0。 综上:对于任意的p,只有一个本原0位。(定理2) 讨论完了本原0位的问题,就得到那题的一个最简单的解法,从1开始枚举,找到本原a-0位的位置pos,接下来的a-0位必然是k*pos,且a=(a^k)%p。因为我们要找到第一个1-0位,即是a^x=1(mod?p)这个方程的最小解。直接暴力是枚举O(p)。观察到a^phi(p)=1 mod p(注意gcd(a,p)=1),可以得到x必为phi(p)的因子,枚举因子即可。估计会TLE。 (为什么x必为phi(p)的因子?懂群论的直接上拉格朗日定理,不懂的给一个简单证明,设k是最小的整数使得a^k=1 mod p,有a^(j*k+i)=a^i,如果k不是phi(p)的因子,那么a^phi(p)=a^(phi(p)%k)!=1) 2 素数组合 设模数P=uv,且gcd(u,v)=1,则方程组:? f(x-1)=1 (mod P)? f(x)=0 (mod?P)? (循环节的条件) 等价于: f(x)=0 (mod u) f(x)=0 (mod v) f(x-1)=1 (mod u) f(x-1)=1 (mod v) 这个方程组(中国剩余定理) 设%u的第一个1-0位为pos1,%v第一个1-0位为pos2,显然有x1=k*pos1 x2=k*pos2(考虑循环节的定义),故最小正解为lcm(pos1,pos2)。 推广之后得到P=p1^k1*p2^k2...pn^kn(p1..pn为素数)则最小解为lcm(pos1,pos2..posk),也就是说,我们只用研究素数及其k次方的解,就可以得到所有数的解。 现在我们研究单个素数的本原0位的位置。 定理3:对于p5,如果5是p的平方剩余,本原0位的位置出现在(p-1)及其因子位,如果是平方非剩余,则出现在2*(p+1)及其因子位。 证明: f(n)={(1/√5)*{[(1+√5)/2]^n-[(1-√5)/2]^n}}%p 如果5是p的平方剩余,则有a^2=5 (mod p) 通项公式化为:{(1/a)*{[(1+a)/2]^n-[(1-a)/2]^n}}%p 令n=p-1,由费马小定理: [(1+a)/2]^(p-1)=1 (m

文档评论(0)

ipbohn97 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档