首页 > 其他分享 >求和 题解

求和 题解

时间:2023-08-24 20:24:51浏览次数:43  
标签:lfloor right frac 求和 题解 sum xd left

求和

题目大意

给定 \(n,p\),求:

\[\left(\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)^{i+j}\right)\bmod p \]

多组数据。

思路分析

老规矩,先化式子:

\[\begin{aligned} \sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)^{i+j}&= \sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^nd^{\,i+j}\,[\gcd(i,j)=d]\\ &=\sum_{d=1}^n\sum_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{n}{d}\right\rfloor}d^{\,(i+j)\,d}\,[\gcd(i,j)=1]\\ &=\sum_{d=1}^n\sum_{x=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\mu(x)\sum_{i=1}^{\left\lfloor\frac{n}{xd}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{n}{xd}\right\rfloor}d^{\,(i+j)\,xd} \end{aligned}\]

观察后面的部分:

\[\begin{aligned} \sum_{i=1}^{\left\lfloor\frac{n}{xd}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{n}{xd}\right\rfloor}d^{\,(i+j)\,xd}&= \Bigg(\sum_{i=1}^{\left\lfloor\frac{n}{xd}\right\rfloor}d^{\,ixd}\Bigg)\times \Bigg(\sum_{j=1}^{\left\lfloor\frac{n}{xd}\right\rfloor}d^{\,jxd}\Bigg)\\ &=\Bigg(\sum_{i=1}^{\left\lfloor\frac{n}{xd}\right\rfloor}d^{\,ixd}\Bigg)^2 \end{aligned}\]

设 \(f(d,n)=\sum\limits_{i=1}^nd^{\,i}\),那么后面的部分就可以表示为 \(f^2(d^{xd},\left\lfloor\frac{n}{xd}\right\rfloor)\)。

我们发现,\(f\) 是一个首项为 \(d\),公比为 \(d\) 的等比数列前 \(n\) 项和,可以 \(O(\log n)\) 计算,具体的说:

\[f(d,n)=\begin{cases}d^{\,n}+f(d,\dfrac{n-1}{2})&n\equiv 1\pmod 2\\(d^{\frac{n}{2}}+1)\times f(d,\dfrac{n}{2})&n\equiv 0\pmod 2\end{cases} \]

那么我们的式子就变成了:

\[\sum_{d=1}^n\sum_{x=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\mu(x)f^2(d^{xd},\left\lfloor\frac{n}{xd}\right\rfloor) \]

我们发现,如果暴力计算这个式子,也就是暴力枚举 \(d\),枚举 \(x\),直接计算 \(f\),那么时间复杂度是 \(O(n\log n)\) 的,可以通过(需要轻微卡常)。

  • 为什么时间复杂度是 \(O(n\log n)\)?

证明就不证了(其实是我不会),这里放一张图:

代码

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;
const int N=1550000,L=1500000;
#define int long long

int prime[N],mu[N],v[N];
int cnt,n,T,mod;

int mode(int x){
    while(x>mod) x-=mod;
    return x;
}

int q_pow(int a,int b){
    int res=1;
    while(b){
        if(b&1) res=(res*a)%mod;
        a=(a*a)%mod;
        b>>=1;
    }
    return res;
}

void sieve(){
    mu[1]=1;
    for(int i=2;i<=L;i++){
        if(!v[i]){prime[++cnt]=i;mu[i]=-1;}
        for(int j=1;j<=cnt&&i*prime[j]<=L;j++){
            v[i*prime[j]]=1;
            if(i%prime[j]==0) break;
            mu[i*prime[j]]=-mu[i];
        }
    }
}

int f(int d,int n){
    if(n==1) return d;
    int res=f(d,n>>1);
    res=mode(res+res*q_pow(d,n>>1)%mod);
    if(n&1) res=mode(res+q_pow(d,n)%mod);
    return res;
}

signed main(){
    sieve();
    scanf("%lld",&T);
    while(T--){
        scanf("%lld%lld",&n,&mod);
        int res=0;
        for(int d=1;d<=n;d++){
            int r=n/d;
            for(int x=1;x<=r;x++){
                if(!mu[x]) continue;
                int ans=f(q_pow(d,x*d%(mod-1)),r/x);
                res=mode(res+mu[x]*ans*ans%mod+mod);
            }
        }
        cout<<res<<'\n';
    }
    return 0;
}

标签:lfloor,right,frac,求和,题解,sum,xd,left
From: https://www.cnblogs.com/TKXZ133/p/17655072.html

相关文章

  • Arithmetic Progression 题解
    ArithmeticProgression题目大意存在一个打乱了顺序的等差数列\(a\),你可以询问不超过\(60\)次,每次可以以以下两种方式之一进行询问:查询\(a\)中是否有严格大于\(x\)的数。查询\(a_i\)的值。你需要求出这个等差数列的首项和公差。思路分析比较有意思的题。看......
  • CF1850E Cardboard for Pictures 题解
    前言一个月前的一场悲剧qwq传送门没事干写的qwq热乎着的一道题,昨晚上刚考完,然而这是一场悲剧。。。。题解题目大意给定\(a_1~a_n\)和\(c\),求\((a_1+2\timesw)^2+(a_2+2\timesw)^2+...+(a_n+2\timesw)^2=c\)时\(w\)的最小值解析我们来化简一下这个式子:\((a_......
  • NOIP 2023 周赛 3 题解
    A-Permutationsummarization构造一个\(1\dotsn\)的排列使\(\prod\limits_{i=1}^n\operatorname{lcm}(p_i,p_{(i\bmodn)+1})\)最大。solution不难发现上式最大为\(\prod\limits_{i=1}^ni^2\),即让所有\(\operatorname{lcm}(x,y)=x\timesy\),那么只要使相邻两个数互质......
  • 题解 ABC309Ex【Simple Path Counting Problem】
    好好玩的题。设普通生成函数\(F_i\),其中\([z^k]F_i\)表示从所有起点走到\((i,k)\)的方案数。特别地,\([z^k]F_1=\sum\limits_{a\inA}[a=k]\)。注意到\(F_i=(z^{-1}+1+z)F_{i-1}\)几乎成立,但是在\([z^1]F_i\)和\([z^M]F_i\)处不成立。尝试对\(F_i\)进行改造:\[[z^k......
  • 国标GB2818视频平台EasyGBS国标平台与车机设备连接显示未连接成功的问题解决方法
    EasyGBS平台可提供流媒体接入、处理、转发等服务,支持内网、公网的监控设备通过国标GB/T28181协议进行视频监控直播。平台兼容性强,只要设备支持国标GB28181协议,均能快速接入EasyGBS,实现视频的监控直播、视频录像、语音对讲、云存储、检索及回放、告警、级联等。​......
  • 国标视频云服务EasyGBS国标平台与海康4200平台级联后不能播放的问题解决方法
    国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频流包括RTSP、RTMP、FLV、HLS、WebRTC等......
  • CodeForces1741G-Kirill and Company题解
    \(\large\text{CodeForces1741G-KirillandCompany题解}\)题面传送门(有翻译(由黄巨佬提供))思路预处理因为\(k\)很小,所以可以先bfs预处理出家在\(i(2\lei\len)\)的人能捎带上哪些集合的人,在表示集合时用一个\(0\)到\(2^k-1\)的整数\(j\)表示,若\(j\)在二进质下的......
  • Codeforces Round #849 (Div. 4) 题解
    第一次打$\text{Div.4}$,感觉体验还行,差一题AK。##A直接使用if语句判断某个字符是否在字符串$\text{codeforces}$中出现过,幼儿园小朋友都会做。时间复杂度$\mathcal{O}(T)$,空间复杂度$\text{O}(1)$。ACCode##B用两个变量$x,y$记录当前走到哪里。若出现过$x=1,y=1$的......
  • CF36D New Game with a Chess Piece 题解
    前言:都大半年没在洛谷上提交过题解了。SPOJ上有双倍经验,题号为SP7602。我看题解区的大佬们有的正经用博弈论做,有的打表,但是感觉没有讲得很形象,这篇题解将生动讲述打表做法,同时为了让大家在感性理解后,还可以理性理解,会附上证明(这部分参考了别的题解)。正文:Step1:打表找规律......
  • CF54C First Digit Law 题解
    题目传送门\(Solution\):一个比较简单的数位dp处理技巧加上一个暴力的dp。设\(p_i\)为区间\([l_i,r_i]\)中出现\(1\)开头的数的概率。考虑\(solve(x)\)函数为求出\([1,x]\)中开头为\(1\)的个数。显然低于\(x\)的位数的数是全部能取到的,这时候开头为\(1\)......