luogu1891 疯狂lcm ??欧拉反演?
给定正整数N,求LCM(1,N)+LCM(2,N)+...+LCM(N,N)。
多组询问,1≤T≤300000,1≤N≤1000000
\(\sum_{i=1}^nlcm(i,n)\)
\(=\sum_{i=1}^n\frac{in}{\gcd(i,n)}\)
\(=n\sum_{p|n}\frac 1 p\sum_{i=1}^ni[\gcd(i,n)=p]\)
\(=n\sum_{p|n}\sum_{i=1}^{n/p}i[\gcd(i,\frac n p)=1]\)//注意这里是n/p而不是n,mdzz第一次我这里推错了
\(=n\sum_{p|n}\sum_{i=1}^{p}i[\gcd(i,p)=1]\)
然后就可以套用公式\(\sum_{i=1}^ni[\gcd(i,n)=1]=\frac {[n=1]+n\varphi(n)}{2}\)
\(=n\sum_{p|n}\frac{[p=1]+p\varphi(p)}{2}\)
线性筛,对于所有\(p\)预处理所有的\([p=1]+\varphi(p)*p\)
然后枚举倍数,在100Wlog100W时间复杂度内求出所有N的答案
代码没时间写了,明天放
然而还是在3分钟内写出了代码
#include <cstdio>
using namespace std;
const int fuck = 1000000;
bool vis[fuck + 10];
int prime[fuck + 10], tot;
int phi[fuck + 10];
long long ans[fuck + 10];
int main()
{
phi[1] = 1;
for (int i = 2; i <= fuck; i++)
{
if (vis[i] == false) prime[++tot] = i, phi[i] = i - 1;
for (int j = 1; j <= tot && i * prime[j] <= fuck; j++)
{
vis[i * prime[j]] = true;
if (i % prime[j] == 0) { phi[i * prime[j]] = phi[i] * prime[j]; break; }
else phi[i * prime[j]] = phi[i] * (prime[j] - 1);
}
}
for (int p = 1; p <= fuck; p++)
{
long long sb = (p == 1) + phi[p] * (long long)p;
for (int b = p; b <= fuck; b += p)
{
ans[b] += sb;
}
}
int t; scanf("%d", &t);
while (t --> 0)
{
int x;
scanf("%d", &x);
printf("%lld\n", ans[x] * x / 2);
}
return 0;
}
luogu1891 疯狂lcm ??欧拉反演?的更多相关文章
- 【luogu3768】简单的数学题 欧拉函数(欧拉反演)+杜教筛
题目描述 给出 $n$ 和 $p$ ,求 $(\sum\limits_{i=1}^n\sum\limits_{j=1}^nij\gcd(i,j))\mod p$ . $n\le 10^{10}$ . ...
- 【bzoj3518】点组计数 欧拉函数(欧拉反演)
题目描述 平面上摆放着一个n*m的点阵(下图所示是一个3*4的点阵).Curimit想知道有多少三点组(a,b,c)满足以a,b,c三点共线.这里a,b,c是不同的3个点,其顺序无关紧要.(即(a,b ...
- luogu P1447 [NOI2010]能量采集 欧拉反演
题面 题目要我们求的东西可以化为: \[\sum_{i=1}^{n}\sum_{j=1}^{m}2*gcd(i,j)-1\] \[-nm+2\sum_{i=1}^{n}\sum_{j=1}^{m}gc ...
- luogu P3768 简单的数学题 杜教筛 + 欧拉反演 + 逆元
求 $\sum_{i=1}^{n}\sum_{j=1}^{n}ijgcd(i,j)$ 考虑欧拉反演: $\sum_{d|n}\varphi(d)=n$ $\Rightarrow \sum_{i ...
- [Luogu1891]疯狂LCM[辗转相减法]
题意 多组询问,每次给定 \(n\) ,求:\(\sum_{i=1}^nlcm(i,n)\) . \(\rm T \leq 3\times 10^4\ ,n \leq 10^6\). 分析 推式子: ...
- [SDOI2012]Longge的问题 欧拉反演_欧拉函数
Code: #include<cstdio> #include<algorithm> #include<cmath> #include<string> ...
- P6624-[省选联考2020A卷]作业题【矩阵树定理,欧拉反演】
正题 题目链接:https://www.luogu.com.cn/problem/P6624 题目大意 \(n\)个点的一张图,每条边有权值,一棵生成树的权值是所有边权和乘上边权的\(gcd\),即 ...
- 【BZOJ3518】点组计数 欧拉函数
[BZOJ3518]点组计数 Description 平面上摆放着一个n*m的点阵(下图所示是一个3*4的点阵).Curimit想知道有多少三点组(a,b,c)满足以a,b,c三点共线.这里a,b,c ...
- Luogu P1447 [NOI2010]能量采集 数论??欧拉
刚学的欧拉反演(在最后)就用上了,挺好$qwq$ 题意:求$\sum_{i=1}^{N}\sum_{j=1}^{M}(2*gcd(i,j)-1)$ 原式 $=2*\sum_{i=1}^{N}\sum_ ...
随机推荐
- Java 的标识符
标识符: 在写代码的时候为了增强代码的阅读性会自定义很多名字,如:类名.方法名.变量名等 这种名称成为标识符 标识符命名规则: 由字母(可以是中文).数字.下划线.$ 组成,但不能以数字开头 大小写敏 ...
- 【ZooKeeper怎么玩】之一:为什么需要ZK
博客已经搬家,见[ZooKeeper怎么玩]之一:为什么需要ZK 学习新东西首先需要搞清楚为什么学它,这是符合我们的一个认知过程.<!--more-->#ZooKeeper是什么ZooKe ...
- HDLM命令dlnkmgr详解之三__view
view命令主要用于显示program information, path information, LU information, HBA port information, CHA port in ...
- Android 数据库 OrmLite Failed to open database
04-01 16:49:32.720: E/SQLiteLog(1894): (14) cannot open file at line 30204 of [00bb9c9ce4]04-01 16:4 ...
- springmvc 注解式开发 处理器方法的返回值
1.返回void -Ajax请求 后台: 前台: 返回object中的数值型: 返回object中的字符串型: 返回object中的自定义类型对象: 返回object中的list: 返回object中 ...
- POJ 3714 分治/求平面最近点对
第一次见这种问题直接懵圈...没想到分治法这么强大,借鉴了lyd的代码: 代码如下 #include<cstdio> #include<algorithm> #include& ...
- 算法Sedgewick第四版-第1章基础-010一检查括号是否成对出现
/****************************************************************************** * Compilation: javac ...
- Entity Framework Tutorial Basics(37):Lazy Loading
Lazy Loading: One of the important functions of Entity Framework is lazy loading. Lazy loading means ...
- HttpServletRequest和ServletRequest的区别.RP
问题: 请问HttpServletRequest和ServletRequest的区别? 回答: servlet理论上可以处理多种形式的请求响应形式 http只是其中之一 所以HttpServletRe ...
- 在centos上安装sequoaidb的php驱动
1:搭建PHP的运行环境 yum install httpd httpd-devel yum install php php-devel yum install php-gd php-imap p ...