• CF185D


    转载

    题意

    (T) 组询问,每次给定 (k,l,r,p),求 ( ext{lcm}(k^{2^l}+1,k^{2^{l+1}}+1,cdots,k^{2^r}+1)mod p)

    (1leqslant Tleqslant 10^5,1leqslant kleqslant 10^6,0leqslant lleqslant rleqslant 10^{18},2leqslant pleqslant 10^9),保证 (p) 是质数。

    分析

    小清新数论题。

    我们简单猜个结论,任意两个数的 (gcd) 都不会很大。取任意两个位置 (a,b(a<b)),设 (gcd(k^{2^a}+1,k^{2^b}+1)=d)

    [k^{2^a}equiv k^{2^b}equiv -1pmod d\1equiv(-1)^{2^{b-a}}equiv (k^{2^{a}})^{2^{b-a}}equiv k^{2^b}equiv -1pmod d ]

    于是 (d=1)(2),且 (d=2) 当且仅当 (k) 为奇数。

    (t=prod_{i=l}^r(k^{2^t}+1)),那么答案就是:

    [egin{cases}frac{t}{2^{r-l}}&kequiv1pmod 2\t&kequiv 0pmod 2end{cases} ]

    那么我们转求 (t) 的值,考虑直接推式子:

    [(k^{2^l}+1)((k^{2^l})^2+1)((k^{2^l})^4+1)cdots((k^{2^l})^{2^{r-l}}+1)\=sum_{p=0}^{2^{r-l+1}-1}(k^{2^l})^p=frac{(k^{2^l})^{2^{r-l+1}}-1}{k^{2^l}-1}=frac{k^{2^{r+1}}-1}{k^{2^l}-1} ]

    然后直接算就好了,注意特判 (k^{2^l}equiv 1pmod p) 的情况,此时上式的值为:

    [(1+1)(1^2+1)(1^4+1)cdots(1^{2^{r-l}}+1)=2^{r-l+1} ]

    代码

    #include<stdio.h>
    int T,k,p;
    long long l,r;
    int ksm(int a,long long b,int mod){
        int res=1;
        while(b){
            if(b&1)
                res=1ll*res*a%mod;
            a=1ll*a*a%mod,b>>=1;
        }``
        return res;
    }
    int f(long long x){
        return k%p==0? 0:ksm(k,ksm(2,x,p-1),p);
    }
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d%lld%lld%d",&k,&l,&r,&p);
            if(p==2)
                printf("%d
    ",(k&1)^1);
            else{
                int ans=(f(l)==1? ksm(2,r-l+1,p):(1ll*(f(r+1)-1+p)%p*ksm((f(l)-1+p)%p,p-2,p)%p));
                if(k&1)
                    ans=1ll*ans*ksm(ksm(2,r-l,p),p-2,p)%p;
                printf("%d
    ",ans);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    线性代数:矩阵行列式
    线性代数:逆变换
    线性代数:线性变换
    线性代数:零空间
    线性代数:向量乘法
    线性代数基础:向量组合
    线性代基础理论:向量
    线性代基础理论:矩阵
    SpringBoot 消费NSQ消息
    将Oracle中的数据放入elasticsearch
  • 原文地址:https://www.cnblogs.com/CHK666/p/15549783.html
Copyright © 2020-2023  润新知