洛谷 - P1891 - 疯狂LCM - 线性筛
另一道数据范围不一样的题:https://www.cnblogs.com/Yinku/p/10987912.html
$F(n)=\sum\limits_{i=1}^{n} lcm(i,n) $
$\sum\limits_{i=1}^{n} \frac{in}{gcd(i,n)} $
枚举g,提n。
$n \sum\limits_{g|n}\frac{1}{g} \sum\limits_{i=1}^{n} i [gcd(i,n)==g] $
前面带有id的时候,除以g要提g到前面。
$n \sum\limits_{g|n} \sum\limits_{i=1}^{\frac{n}{g}} i [gcd(i,\frac{n}{g})1] $
$n \sum\limits_{g|n} \sum\limits_{i=1}^{\frac{n}{g}} i [gcd(i,\frac{n}{g})1] $
考虑子问题:
$H(n)=\sum\limits_{i=1}^{n} i [gcd(i,n)==1] $
显然为(所有的i的和减去是n的因子d的倍数的数,容斥一下带个莫比乌斯函数)
$\sum\limits_{i=1}^{n}i + \sum\limits_{d|n,d>=2} \mu(d) (d+2d+...+n) $
吸收,整理。
$\frac{1}{2} \sum\limits_{d|n} \mu(d) (d+n)(\frac{n}{d}) $
提n,分配律。
$\frac{n}{2} \sum\limits_{d|n} \mu(d) (d+n)(\frac{1}{d}) \(
\)\frac{n}{2} \sum\limits_{d|n} \mu(d) (1+\frac{n}{d}) \(
\)\frac{n}{2} (\sum\limits_{d|n} \mu(d) +\sum\limits_{d|n} \mu(d)\frac{n}{d}) $
使用莫比乌斯函数的性质:
$\frac{n}{2} ([n==1] +\varphi(n)) $
所以:
$H(n)=\sum\limits_{i=1}^{n} i [gcd(i,n)1] = \frac{n}{2} ([n1] +\varphi(n)) $
原式:
\(F(n)=n \sum\limits_{g|n}H(\frac{n}{g}) = \frac{n}{2}\sum\limits_{g|n}\frac{n}{g} ([\frac{n}{g}==1] +\varphi(\frac{n}{g}))\)
分配律:
\(\frac{n}{2}(\sum\limits_{g|n}\frac{n}{g} [\frac{n}{g}==1] + \sum\limits_{g|n}\frac{n}{g} \varphi(\frac{n}{g}) )\)
很显然可以把 \(\frac{n}{g}\) 换成 \(g\):
\(\frac{n}{2}(\sum\limits_{g|n} g [g==1] + \sum\limits_{g|n} g \varphi(g) )\)
结论:
\(F(n)=\sum\limits_{i=1}^{n} lcm(i,n) = \frac{n}{2}(1 + \sum\limits_{g|n} g \varphi(g) )\)
后面明显是积性函数,可以用线性筛(本题n数据范围较小,否则可以直接质因数分解卡过去)。问题在于在质数幂次位置怎么求。列一下就可以发现怎么求。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read() {
int x=0;
char c=getchar();
while(c<'0'||c>'9')
c=getchar();
do {
x=(x<<3)+(x<<1)+c-'0';
c=getchar();
} while(c>='0'&&c<='9');
return x;
}
inline void write(ll x) {
if(x>9) {
write(x/10);
}
putchar(x%10+'0');
return;
}
const int MAXN=1e6;
int pri[MAXN+1];
int &pritop=pri[0];
ll q[MAXN+1];
int pk[MAXN+1];
void sieve(int n=MAXN) {
pk[1]=1;
q[1]=1;
for(int i=2; i<=n; i++) {
if(!pri[i]) {
pri[++pritop]=i;
pk[i]=i;
q[i]=1ll*i*(i-1)+1;
}
for(int j=1; j<=pritop; j++) {
int &p=pri[j];
int t=i*p;
if(t>n)
break;
pri[t]=1;
if(i%p) {
pk[t]=pk[p];
q[t]=q[i]*q[p];
}
else{
pk[t]=pk[i]*p;
if(pk[t]==t){
q[t]=q[i]+1ll*(t-t/p)*t;
}else{
q[t]=q[pk[t]]*q[t/pk[t]];
}
break;
}
}
}
}
inline ll ans(int n){
ll res=q[n]+1;
res*=n;
res/=2;
return res;
}
inline void solve() {
sieve();
int t=read();
while(t--){
int n=read();
write(ans(n));
putchar('\n');
}
}
int main() {
#ifdef Yinku
freopen("Yinku.in","r",stdin);
#endif // Yinku
solve();
return 0;
}
洛谷 - P1891 - 疯狂LCM - 线性筛的更多相关文章
- 洛谷 P1891 疯狂LCM 题解
原题链接 享受推式子的乐趣吧 数论真有趣! 庆祝:数论紫题第 \(3\) 道. \[\sum_{i=1}^n \operatorname{lcm}(i,n) \] \[= \sum_{i=1}^n \ ...
- 题解:洛谷P1891 疯狂LCM
原题链接 题目描述 描述: 众所周知,czmppppp是数学大神犇.一天,他给众蒟蒻们出了一道数论题,蒟蒻们都惊呆了... 给定正整数N,求LCM(1,N)+LCM(2,N)+...+LCM(N,N) ...
- 【洛谷 p3383】模板-线性筛素数(数论)
题目:给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内).(N<=10000000,M<=100000) 解法:1.欧拉筛O(n),数组近乎100KB:2.( ...
- 动态规划 洛谷P1616 疯狂的采药
动态规划 洛谷P1616 疯狂的采药 同样也是洛谷的动态规划一个普及-的题目,接下来分享一下我做题代码 看到题目,没很认真的看数据大小,我就提交了我的代码: 1 //动态规划 洛谷P1616 疯狂的采 ...
- 洛谷P2568 GCD(线性筛法)
题目链接:传送门 题目: 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 ...
- 洛谷 P4902 乘积 (约数筛,前缀和(积))
洛谷P4902乘积 题意简述: 给 $ t $ 组 $ (a,b) $ 求: $ \prod_{i=A}^{B}\prod_{j=1}^{i}(\frac{i}{j})^{\lfloor \frac{ ...
- 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)
LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\) ...
- BZOJ 2460 & 洛谷 P4570 [BJWC2011]元素 (线性基 贪心)
题目链接: 洛谷 BZOJ 题意 给定 \(n\) 个矿石,每个矿石有编号和魔力值两种属性,选择一些矿石,使得魔力值最大且编号的异或和不为 0. 思路 线性基 贪心 根据矿石的魔力值从大到小排序. 线 ...
- 洛谷P4213 Sum(杜教筛)
题目描述 给定一个正整数N(N\le2^{31}-1)N(N≤231−1) 求ans_1=\sum_{i=1}^n\phi(i),ans_2=\sum_{i=1}^n \mu(i)ans1=∑i=1 ...
随机推荐
- 剑指Offer面试题16(Java版):反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 解决与链表相关的问题总是有大量的指针操作.而指针操作的代码总是easy出错的. 非常多的面试官喜欢出链表相关的问题,就是 ...
- Apache/2.4.9启动错误:AH01630: client denied by server configuration
在升级Yii框架1.11->2.0beta时,PHP升级到5.5.顺带升级Apache2.2.x到2.4.9. 把原有vhost配置移植过来,出现Apache启动错误: AH01630: cli ...
- JavaScript全讲-必知的特性
上篇讲完JS面向对象的特性,我们今天就来聊聊它的其它特性. JS面向对象的特性较为隐晦,真正使用也是比較少的.而今天我们要讲的,却是在实际开发中常常遇到的特性. 1. 函数式编程 多数人并不知道&qu ...
- BAPI_PO_CREATE1 创建PO ch_memory_complete = ‘x',导致hold on 解决方案,
1.尝试注释标准逻辑,看会不会有什么问题, ZME_BAPI_PO_CUST IF_EX_ME_BAPI_PO_CREATE_02~INBOUND 里面有个控制很费解 我给注释了 2.改用 BAPI_ ...
- [数据挖掘课程笔记]人工神经网络(ANN)
人工神经网络(Artificial Neural Networks)顾名思义,是模仿人大脑神经元结构的模型.上图是一个有隐含层的人工神经网络模型.X = (x1,x2,..,xm)是ANN的输入,也就 ...
- linux host=${host:-"localhost"}使用方法
localhost=${host:-"localhost"} host 变量未设定或者为空,host取"-"后面的值;否则host=$host host=${h ...
- STM32 ~ STM32 TIM重映射
复用功能 没有重映射 部分重映射 完全重映射 TIM3_CH1 PA6 PB4 PC6 CH2 PA7 PB5 PC7 CH3 PB0 PB0 PC8 CH4 PB1 PB1 PC9 /**重映射 t ...
- POJ1456 Supermarket —— 贪心 + 路径压缩优化
题目链接:http://poj.org/problem?id=1456 Supermarket Time Limit: 2000MS Memory Limit: 65536K Total Subm ...
- MySQL学习笔记(一)——数据库基础
自己上大学时也学习过数据库,做开发时也用到过,但是做界面开发对于数据库的使用相对来说是比较简单的,大学时系统学习的数据库也还给老师了,在测试工作中也只是用到了一些基础sql,增删改查这一类的,但是自己 ...
- struts2中<s:if>标签的使用
转载:http://blog.sina.com.cn/s/blog_5f9938640100v2kr.html A:<s:if>判断字符串的问题: 1.判断单个字符:<s:if te ...