P6825 「EZEC-4」求和

P6825 「EZEC-4」求和

求:
∑ i = 1 n ∑ j = 1 n gcd ⁡ ( i , j ) i + j \sum_{i=1}^{n}\sum_{j=1}^{n}\gcd(i,j)^{i+j} i=1nj=1ngcd(i,j)i+j
先化简原式,有:
∑ i = 1 n ∑ j = 1 n gcd ⁡ ( i , j ) i + j = ∑ d = 1 n ∑ i = 1 n ∑ j = 1 n d i + j [ gcd ⁡ ( i , j ) = d ] = ∑ d = 1 n ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ d d ⋅ ( i + j ) [ gcd ⁡ ( i , j ) = 1 ] = ∑ d = 1 n ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ d d ⋅ ( i + j ) ∑ p ∣ gcd ⁡ ( i , j ) μ ( p ) = ∑ d = 1 n ∑ p = 1 ⌊ n d ⌋ μ ( p ) ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ d d ⋅ ( i + j ) [ p ∣ i ] [ p ∣ j ] = ∑ d = 1 n ∑ p = 1 ⌊ n d ⌋ μ ( p ) ∑ i = 1 ⌊ n p d ⌋ ∑ j = 1 ⌊ n p d ⌋ d d p ⋅ ( i + j ) = ∑ d = 1 n ∑ p = 1 ⌊ n d ⌋ μ ( p ) ∑ i = 1 ⌊ n T ⌋ ∑ j = 1 ⌊ n T ⌋ d T ⋅ ( i + j ) T = d p = ∑ d = 1 n ∑ p = 1 ⌊ n d ⌋ μ ( p ) ∑ i = 1 ⌊ n T ⌋ ( d T ) i ∑ j = 1 ⌊ n T ⌋ ( d T ) j = ∑ d = 1 n ∑ p = 1 ⌊ n d ⌋ μ ( p ) ( ∑ i = 1 ⌊ n T ⌋ ( d T ) i ) 2 \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}^{n}d^{i+j}[\gcd(i,j)=d]\\ &=\sum_{d=1}^{n}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}d^{d\cdot(i+j)}[\gcd(i,j)=1]\\ &=\sum_{d=1}^{n}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}d^{d\cdot(i+j)}\sum_{p|\gcd(i,j)}\mu(p)\\ &=\sum_{d=1}^{n}\sum_{p=1}^{\lfloor\frac{n}{d}\rfloor}\mu(p)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}d^{d\cdot(i+j)}[p|i][p|j]\\ &=\sum_{d=1}^{n}\sum_{p=1}^{\lfloor\frac{n}{d}\rfloor}\mu(p)\sum_{i=1}^{\lfloor\frac{n}{pd}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{pd}\rfloor}d^{dp\cdot(i+j)}\\ &=\sum_{d=1}^{n}\sum_{p=1}^{\lfloor\frac{n}{d}\rfloor}\mu(p)\sum_{i=1}^{\lfloor\frac{n}{T}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{T}\rfloor}d^{T\cdot(i+j)} & T=dp\\ &=\sum_{d=1}^{n}\sum_{p=1}^{\lfloor\frac{n}{d}\rfloor}\mu(p)\sum_{i=1}^{\lfloor\frac{n}{T}\rfloor}(d^T)^i\sum_{j=1}^{\lfloor\frac{n}{T}\rfloor}(d^T)^j\\ &=\sum_{d=1}^{n}\sum_{p=1}^{\lfloor\frac{n}{d}\rfloor}\mu(p)\left(\sum_{i=1}^{\lfloor\frac{n}{T}\rfloor}(d^T)^i\right)^2 \end{aligned} i=1nj=1ngcd(i,j)i+j=d=1ni=1nj=1ndi+j[gcd(i,j)=d]=d=1ni=1dnj=1dndd(i+j)[gcd(i,j)=1]=d=1ni=1dnj=1dndd(i+j)pgcd(i,j)μ(p)=d=1np=1dnμ(p)i=1dnj=1dndd(i+j)[pi][pj]=d=1np=1dnμ(p)i=1pdnj=1pdnddp(i+j)=d=1np=1dnμ(p)i=1Tnj=1TndT(i+j)=d=1np=1dnμ(p)i=1Tn(dT)ij=1Tn(dT)j=d=1np=1dnμ(p)i=1Tn(dT)i2T=dp

再看后面那部分,令 x = T p T x=\frac{T}{p}^T x=pTT

S n S_n Sn 为等比数列前 n n n 项和,则有:
S n = S ⌊ n 2 ⌋ ( 1 + a ⌊ n 2 ⌋ ) + a n [ 2 ∤ n ] S_n=S_{\lfloor\frac{n}{2}\rfloor}(1+a^{\lfloor\frac{n}{2}\rfloor})+a^n[2 \nmid n] Sn=S2n(1+a2n)+an[2n]
即可 O ( log ⁡ n ) \mathcal O(\log n) O(logn) 求解。

时间复杂度 O ( n log ⁡ n ) \mathcal O(n \log n) O(nlogn)

#include <bits/stdc++.h>

using namespace std;

#define ll long long

#define pll pair<ll, ll>

#define mpr make_pair

#define fi first

#define se second

const int _ = 1.5e6 + 10;

int mod;

int read()
{
    int x = 0, f = 1;
    char c = getchar();
    while (c < '0' || c > '9')
    {
        if (c == '-')
            f = -1;
        c = getchar();
    }
    while (c >= '0' && c <= '9')
    {
        x = x * 10 + c - '0';
        c = getchar();
    }
    return x * f;
}

int qpow(int x, int y)
{
    int res = 1;
    while (y)
    {
        if (y & 1)
            res = 1ll * res * x % mod;
        x = 1ll * x * x % mod;
        y >>= 1;
    }
    return res;
}

pll qsum(int a, int n)
{
    if (n == 0)
        return mpr(1, 1);
    if (n == 1)
        return mpr(a, a);
    pll tmp = qsum(a, n / 2);
    if (n & 1)
        return mpr((tmp.fi * (tmp.se + 1) % mod + tmp.se * tmp.se % mod * a % mod) % mod, tmp.se * tmp.se % mod * a % mod);
    else
        return mpr(tmp.fi * (tmp.se + 1) % mod, tmp.se * tmp.se % mod);
}

int T, n, m, k;

bitset<_> vis;

int cnt, pri[_], mu[_];

void init(int n)
{
    mu[1] = 1;
    for (int i = 2; i <= n; i++)
    {
        if (!vis[i])
            pri[++cnt] = i, mu[i] = -1;
        for (int j = 1; j <= cnt && i * pri[j] <= n; j++)
        {
            vis[i * pri[j]] = 1;
            if (i % pri[j] == 0)
                break;
            mu[i * pri[j]] = -mu[i];
        }
    }
}

int solve(int n)
{
    int ans = 0;
    for (int d = 1; d <= n; d++)
    {
        int a = qpow(d, d);
        int b = a;
        for (int p = 1; p <= n / d; p++)
        {
            pll tmp = qsum(b, n / (d * p));
            ans = (ans + tmp.fi * tmp.fi % mod * (mu[p] + mod) % mod) % mod;
            b = 1ll * b * a % mod;
        }
    }
    return ans;
}

signed main()
{
    T = read();
    init(_ - 10);
    while (T--)
    {
        n = read(), mod = read();
        printf("%d\n", solve(n));
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值