zoukankan      html  css  js  c++  java
  • Codeforces 185D Visit of the Great (数学基础,数论)

    题意

    给定(Q(leq 10^5))组查询,每组查询四个数(k,l,r,p(kleq 10^6, 0leq lleq rleq 10^{18}, pleq 10^9))(p)为质数,求

    [lcm(k^{2^l}+1,k^{2^{l+1}}+1,...,k^{2^r}+1)\%p ]

    我的解题过程

    上来先一个打表找规律,惊讶的发现

    [gcd(k^{2^x}+1,k^{2^{x+y}}+1)=egin{cases}1& k ext{ is even}\2& k ext{ is odd}\end{cases} ]

    然后就顺理成章,根据(lcm(a,b)=frac{ab}{gcd(a,b)})有了

    [Ans=egin{cases}prodlimits_{i=l}^r(k^{2^i}+1)& k ext{ is even}\frac{prodlimits_{i=l}^r(k^{2^i}+1)}{2^{r-l}}& k ext{ is odd}\end{cases} ]

    研究一下(P=prodlimits_{i=l}^r(k^{2^i}+1)).

    [egin{align}P&=(k^{2^l}+1)(k^{2^{l+1}}+1)...(k^{2^r}+1)\&=({(k^{2^{l}})}^{2^0}+{(k^{2^{l}})}^{0})({(k^{2^{l}})}^{2^1}+{(k^{2^{l}})}^{0})...({(k^{2^{l}})}^{2^{r-l}}+{(k^{2^{l}})}^{0})\&=({(k^{2^{l}})}^{(001)_2}+{(k^{2^{l}})}^{0})({(k^{2^{l}})}^{(010)_2}+{(k^{2^{l}})}^{0})...({(k^{2^{l}})}^{(10...0)_2}+{(k^{2^{l}})}^{0})\end{align} ]

    用二进制的方法来看的话,如果把每一项乘出来,就是有(r-l)个二进制位,每一位都可以是0或1。因此

    [egin{align}P&=sumlimits_{j=0}^{2^{r-l+1}-1}{(k^{2^{l}})}^j\&=frac{{(k^{2^l})}^{2^{r-l+1}}-1}{k^{2^l}-1}& k ot=1\&=frac{k^{2^{r+1}}-1}{k^{2^l}-1}& k ot=1\end{align} ]

    由欧拉定理(gcd(k,p) ot=1),即(k\%p ot=0)时,(k^{2^l}equiv k^{2^l\%(p-1)}(mod p)).所以这个(k)的高次幂也很好求,老套路了。当(p|k)时,显然有(k^{2^l}-1equiv k^{2^{r+1}} - 1equiv(-1)(mod p)),且(gcd(k^{2^l}-1,p)=1),所以很显然(P=1).

    剩下的情况中,(gcd(k^{2^l}-1,p)=1)时也很好搞,直接求逆元搞出来就行。但当(gcd(k^{2^l}-1,p) ot=1)(p|(k^{2^l}-1))时,由于逆元不存在,情况有点复杂。因此观察并构造出如下等式:

    [k^{2^{r+1}}-1=(k^{2^l}-1)(k^{2^{r+1}-2^l}+k^{2^{r+1}-2*2^l}+k^{2^{r+1}-3*2^l}+...+k^{2^{r+1}-2^{r-l+1}*2^l}) ]

    显然(T=k^{2^{r+1}-2^l}+k^{2^{r+1}-2*2^l}+k^{2^{r+1}-3*2^l}+...+k^{2^{r+1}-2^{r-l+1}*2^l})是我们要的结果。

    [egin{align}T&=k^{2^{r+1}-2^l}+k^{2^{r+1}-2*2^l}+k^{2^{r+1}-3*2^l}+...+k^{2^{r+1}-2^{r-l+1}*2^l}\&=k^{2^{r+1}}(frac{1}{k^{2^{l}}}+frac{1}{{(k^{2^{l}})}^2}+frac{1}{{(k^{2^{l}})}^3}+...+frac{1}{{(k^{2^{l}})}^{2^{r-l+1}}})\&=k^{2^{r+1}}(frac{1}{k^{2^{l}}}+(frac{1}{k^{2^{l}}})^2+(frac{1}{k^{2^{l}}})^3+...+(frac{1}{k^{2^{l}}})^{2^{r-l+1}})\end{align} ]

    由于(p|(k^{2^l}-1)),即(k^{2^l}equiv 1(mod p)),可知(gcd(k^{2^l},p)=1),因此有(frac{k^{2^{r+1}}}{k^{2^l}}equiv k^{2^{r+1}}(mod p)).因此很显然

    [egin{align}T&equiv k^{2^{r+1}}(1+1+1+...+1)(mod p)\&equiv k^{2^{r+1}}2^{r-l+1}(mod p)\end{align} ]

    现在就能轻松求解出(T)。这题就结束了。

    反思

    1.为什么

    [gcd(k^{2^x}+1,k^{2^{x+y}}+1)=egin{cases}1& k ext{ is even}\2& k ext{ is odd}\end{cases} ]

    看了一眼,官方题解中给出了(y=1)时的证明,还是比较巧妙的。

    (d=gcd(k^{2^x}+1,k^{2^{x+1}}+1)).因此(k^{2^x}equiv-1(mod d)).平方得(k^{2^{x+1}}equiv 1(mod d)).但(k^{2^{x+1}}equiv-1(mod d)),所以只能有(dleq2).再对(k)的奇偶性讨论,即可得出结论。

    2.事实上,最后一段讨论我绕了个弯路。观察到(k^{2^l}equiv 1(mod p)),很明显就有(Pequiv sumlimits_{j=0}^{2^{r-l+1}-1}{(k^{2^{l}})}^jequiv 2^{r-l+1}(mod p))了。

  • 相关阅读:
    实训-涉及前端的一些小总结
    实训-mybatis-经验总结2
    实训-mybatis-经验总结
    中软实训笔记
    jsp 中JSTL遇到的报错异常
    mysql的小发现
    Maven笔记
    springmvc-3-拦截器
    springmvc 上传图片
    springmvc
  • 原文地址:https://www.cnblogs.com/zhugezy/p/12008879.html
Copyright © 2011-2022 走看看