• CF185D Visit of the Great 解题报告


    CF185D Visit of the Great解题报告:

    更好的阅读体验

    题意

    (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;
    }
    
  • 相关阅读:
    搜索--P1605 迷宫
    搜索--P1219 N皇后
    复制百度文库的技巧
    P1036 选数(DFS)
    P1217 [USACO1.5]回文质数 Prime Palindromes
    mysql常用指令
    code blocks 安装与实践
    C++ string 是否以‘’结尾 讨论
    ELK(1) ELK的安装及使用收集日志
    windows下nginx的安装及使用
  • 原文地址:https://www.cnblogs.com/xiaoziyao/p/15237270.html
Copyright © 2020-2023  润新知