[Luogu1891]疯狂LCM[辗转相减法]
题意
多组询问,每次给定 \(n\) ,求:\(\sum_{i=1}^nlcm(i,n)\) 。
- \(\rm T \leq 3\times 10^4\ ,n \leq 10^6\)。
分析
- 推式子:
\]
- 枚举 \(gcd\) :
\]
\]
\]
对于后面的求和可以看成函数 \(f_d\) ,表示所有和 \(d\) 互质的数字之和。
根据辗转相减可以得到 \(gcd(i,d)=gcd(d-i,d)\) ,表明所有与 \(d\) 互质的数字可以两两配对得到 \(d\) 。
所以 \(f_d=\frac{\varphi(d)*d}{2}\) 。
处理 \(\varphi\) 的时间 \(O(n)\) 加上单次处理的时间 \(O(\sqrt n)\),总时间复杂度为 \(O(2n)\) 。
技巧:辗转相减的使用
代码
#include<bits/stdc++.h>
using namespace std;
#define go(u) for(int i=head[u],v=e[i].to;i;i=e[i].last,v=e[i].to)
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
typedef long long LL;
inline int gi(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-48;ch=getchar();}
return x*f;
}
template<typename T>inline bool Max(T &a,T b){return a<b?a=b,1:0;}
template<typename T>inline bool Min(T &a,T b){return b<a?a=b,1:0;}
const int N=1e6 + 7;
int T,pric,n;
int phi[N],pri[N],vis[N];
LL f[N];
void pre(int Num){
phi[1]=1;int to;
for(int i=2;i<=Num;++i){
if(!vis[i]) { phi[i]=i-1,pri[++pric]=i;}
for(int j=1;j<=pric&&(to=i*pri[j])<=Num;++j){
vis[to]=1;
if(i%pri[j]==0){
phi[to]=phi[i]*pri[j];
break;
}
phi[to]=phi[i]*phi[pri[j]];
}
}
}
int main(){
T=gi();
pre(1000000);
f[1]=1;
for(int i=2;i<=1000000;++i) f[i]=1ll*phi[i]*i/2;
while(T--){
n=gi();LL ans=0;
int l=1,r=1000;
while(l<r){
int mid=l+r+1>>1;
if(mid*mid<=n) l=mid;
else r=mid-1;
}
for(int i=1;i<=l;++i)if(n%i==0){
ans+=f[i];
if(i*i!=n)
ans+=f[n/i];
}
printf("%lld\n",ans*n);
}
return 0;
}
[Luogu1891]疯狂LCM[辗转相减法]的更多相关文章
- luogu1891 疯狂lcm ??欧拉反演?
link 给定正整数N,求LCM(1,N)+LCM(2,N)+...+LCM(N,N). 多组询问,1≤T≤300000,1≤N≤1000000 \(\sum_{i=1}^nlcm(i,n)\) \( ...
- Alice and Bob 要用到辗转相减
Alice and BobTime Limit: 1 Sec Memory Limit: 64 MBSubmit: 255 Solved: 43 Description Alice is a be ...
- bzoj 2852: 强大的区间 辗转相除
2852: 强大的区间 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 45 Solved: 12[Submit][Status][Discuss] D ...
- (中等) CF 585C Alice, Bob, Oranges and Apples,矩阵+辗转相除。
Alice and Bob decided to eat some fruit. In the kitchen they found a large bag of oranges and apples ...
- BZOJ.4031.[HEOI2015]小Z的房间(Matrix Tree定理 辗转相除)
题目链接 辗转相除解行列式的具体实现? 行列式的基本性质. //864kb 64ms //裸的Matrix Tree定理.练习一下用辗转相除解行列式.(因为模数不是质数,所以不能直接乘逆元来高斯消元. ...
- Luogu4111 [HEOI2015]小Z的房间 (矩阵树,辗转相除高斯消元)
除法不能用于同余系,要辗转相除.注意不能加入柱子到矩阵. #include <iostream> #include <cstdio> #include <cstring& ...
- 数据结构与算法C++描述学习笔记1、辗转相除——欧几里得算法
前面学了一个星期的C++,以前阅读C++代码有些困难,现在好一些了.做了一些NOI的题目,这也是一个长期的目标中的一环.做到动态规划的相关题目时发现很多问题思考不通透,所以开始系统学习.学习的第一本是 ...
- POJ 2348 Euclid's Game(辗转相除博弈+自由度分析)
题目链接:http://poj.org/problem?id=2348 题目大意:给你两个数a,b,Stan和Ollie轮流操作,每次可以将较大的数减去较小的数的整数倍,相减后结果不能小于0,谁先将其 ...
- P1891 疯狂LCM
\(\color{#0066ff}{ 题目描述 }\) 众所周知,czmppppp是数学大神犇.一天,他给众蒟蒻们出了一道数论题,蒟蒻们都惊呆了... 给定正整数N,求LCM(1,N)+LCM(2,N ...
随机推荐
- webform ajax 上传文件+参数
今天维护webform项目时,有个需求需要在一个ajax中上传excel和多个参数.网上没怎么找到答案,这边做个笔记. 首先上页面大体这样 <form id= "uploadForm& ...
- javascript unshift()和shift()
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- Hadoop HA on Yarn——集群启动
这里分两部分,第一部分是NameNode HA,第二部分是ResourceManager HA (ResourceManager HA是hadoop-2.4.1之后加上的) NameNode HA 1 ...
- CSS控制边界、边框与外轮廓
一.CSS控制边界 1.内边距 padding(内边距也叫内填充) padding-bottom 长度/百分比 元件下端边线的空隙 padding-left 长度/百分比 元件左端边线的空隙 padd ...
- 洛谷 P2045 方格取数加强版【费用流】
题目链接:https://www.luogu.org/problemnew/show/P2045 题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现 ...
- ethers.js-6-Low-Level API
Low-Level API These are advanced, low-level API features that should, for most people not be necessa ...
- hive使用derby的服务模式(可以远程模式)
hive默认使用的derby的嵌入模式.这个就面临着,无法多个并发hive shell共享的问题. 使用MySQL服务器也可以解决问题,但安装.配置太麻烦了. 可以使用轻量级的derby的c/s服务模 ...
- ejs引擎项目
关于这个我也很懵逼,写这篇博客就是想记录一下,有哪位大神看到之后可以略微指点一二,不胜感激....... 一.项目结构 db model user.js version.js schema xx.js ...
- CS231N assignment1
# Visualize some examples from the dataset. # We show a few examples of training images from each cl ...
- nagios-4.0.8 安装部署
1.Nagios工作原理 Nagios周期性调用插件检测服务器状态,并维持一个队列,所有插件返回状态信息都进入队列,Nagios每次从队首开始读取信息,并把状态通过web显示. 安装完成后,在nagi ...