首页 > 其他分享 >洛谷 P2398. GCD SUM

洛谷 P2398. GCD SUM

时间:2023-04-02 20:15:44浏览次数:44  
标签:洛谷 GCD limits int text SUM varphi sum gcd

题目描述

$$\sum \limits _ {i = 1} ^ n \sum \limits _ {j = 1} ^ n \gcd(i, j)$$

输入:
2

输出:
5

算法1 线性筛 $O(n)$

将式子变形:

要知道一个前置定理
$\sum \limits _ {d | n} \varphi ( d ) = n$

艾弗森约定:
定义 $\\\ [P]$ = $$\begin{cases} P \text{ } is \text { }true \text{ }1 \\\ P \text{ }is \text{ }false \text{ }0 \end{cases}$$

 

 

$$\sum\limits _ {i = 1} ^ n \sum\limits _ {j = 1} ^ n \gcd(i, j)\\$$

 

$$=\sum\limits _ {i = 1} ^ n \sum\limits _ {j = 1} ^ n \sum \limits _ {k | \gcd ( i, j )} \varphi ( k )\\$$

 

$$=\sum \limits _ {i = 1} ^ n \sum \limits _ {j = 1} ^ n \sum \limits _ {k | i, k | j} \varphi ( k )\\$$

 

$$=\sum \limits _ {k = 1} ^ n \varphi ( k ) \sum \limits _ {i = 1} ^ n \sum \limits _ {j = 1} ^ n [k | i][k | j]\\$$


$$=\sum \limits _ {k = 1} ^ n \varphi ( k ) \lfloor \frac {n}{k} \rfloor \lfloor \frac {n}{k} \rfloor$$

就可以$O(n)$预处理欧拉函数然后$O(\sqrt n)$数论分块过掉了

$Code:$

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1e5 + 5;

typedef long long LL;

int n;
int primes[N], cnt;
LL phi[N], sum[N];
bool st[N];

void init(int n)
{
    phi[1] = 1;
    for (int i = 2; i <= n; i ++ )
    {
        if (!st[i])
        {
            primes[cnt ++ ] = i;
            phi[i] = i - 1;
        }
        
        for (int j = 0; primes[j] <= n / i; j ++ )
        {
            st[primes[j] * i] = true;
            
            if (i % primes[j] == 0)
            {
                phi[primes[j] * i] = phi[i] * primes[j];
                break;
            }
            
            phi[primes[j] * i] = phi[i] * (primes[j] - 1);
        }
    }
    
    for (int i = 1; i <= n; i ++ )
        sum[i] = sum[i - 1] + phi[i];
}

int main()
{
    init(N - 1);
    
    scanf("%d", &n);
    LL res = 0;
    
    for (int l = 1, r; l <= n; l = r + 1)
    {
        r = n / (n / l);
        res += (sum[r] - sum[l - 1]) * (n / l) * (n / l);
    }
    
    printf("%lld", res);
    
    return 0;
}

 

标签:洛谷,GCD,limits,int,text,SUM,varphi,sum,gcd
From: https://www.cnblogs.com/xyy-yyds/p/17281144.html

相关文章

  • 洛谷 P8918 『MdOI R5』Jump 题解
    题目传送门这一题其实很简单,只是要想到正确方法我一开始用了奇怪的搜索①无解的情况:看上去很离奇,实际上略加思索就会发现,如果输入\(n\)为偶数,那么就铁定无解。证明过程如下:令\(n\bmod{2}=0\),人距离\(n\)点的距离为\(dis\),则当走出第一步(步长为\(1\))时,有:\[dis=\midn......
  • 洛谷 P8742 [蓝桥杯 2021 省 AB] 砝码称重
    经典01背包题首先介绍一下01背包,即一种DP问题,以放置物品为模型,每个物品只能放一次。其区分于完全背包(每个物品可以放无限多次),以及多重背包(每个物品有一个固定次数上限)。题中给出了$N$个砝码及每个砝码的质量,要求我们求出可以称出质量的种数。由此想到转化为01背包。......
  • 洛谷 P9009 [入门赛 #9] 牵连的世界 (Hard Version) 题解
    P9009[入门赛#9],真9。这是一道hack题,即你需要自造符合题意的数据使题中所给程序无法AC。Task01看数据范围知一切,显然有\(-2\times10^9\lea_i\le2\times10^9\),因此\(a_i\)可能为负数。注意C/C++中的取模%(mod)运算实质上是为取余运算(rem)对于整型数a,b来说......
  • 洛谷 P8762 [蓝桥杯 2021 国 ABC] 123 题解
    为什么可以使用前缀和,这里提供解释:初读题目,我们发现这个数列很迷惑,似乎不能使用数学方法来解。\[1,1,2,1,2,3,1,2,3,4,\cdots\]但是,我们可以想到数形结合的方式,我们将数列看作一个三角形,于是他变成了:\[1\]\[1,2\]\[1,2,3\]\[1,2,3,4\]\[\cdots\cdots\]于是本题变得好思......
  • 洛谷P1217 [USACO1.5]回文质数 Prime Palindromes
    #include<bits/stdc++.h>usingnamespacestd;inta,b;boolzs(intx){if(x%2>0){for(inti=3;i<x;i+=2)if(x%i==0)returnfalse;returntrue;}elsereturnfalse;}boolhws(intx......
  • 笔记:洛谷 P3985 不开心的金明
    算法笔记:[背包问题]洛谷P3985不开心的金明题目详情原题链接:洛谷P3985不开心的金明不开心的金明Description  金明今天很不开心,家里购置的二手房就要领钥匙了,房里并没有一间他自己专用的很宽敞的房间。更让他不高兴的是,妈妈昨天对他说:“你需要购买哪些物品,怎么布置,你......
  • prim算法(洛谷P1547)
    P1547[USACO05MAR]OutofHayS模板/*B1682[Usaco2005Mar]OutofHay干草危机洛谷P1547[USACO05MAR]OutofHayS====关键词===================================================prim算法(最小生成树)1.WA,没有加重复边的判断2.加了重复边的判断,还是WA,但分数高了一点3......
  • SB-RocketMQ-Provider-Consumer20230331
     一、生产者1、pom.xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.rocketmq</groupId>......
  • 洛谷P1908 逆序对
    题目描述猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中ai​>aj​且 i<j 的有序对。......
  • 洛谷P3374 【模板】树状数组 1-(单点修改,区间查询)
    题目描述如题,已知一个数列,你需要进行下面两种操作:将某一个数加上 x求出某区间每一个数的和输入格式第一行包含两个正整数 n,m,分别表示该数列数字的个数和操作的总个数。第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来 ......