【XSY2470】lcm 数学
题目大意
\(t\)组询问, 每组询问给定\(n\),求\(\sum_{k=1}^n[n,k]\),其中\([a,b]\)表示\(a\)和\(b\)的最小公倍数 .
\(t\leq 300000,n\leq 1000000\)
题解
\sum_{k=1}^n[k,n]&=n\sum_{k=1}^n\frac{k}{(k,n)}\\
&=n\sum_{p|n}\frac{1}{p}\sum_{k=1}^nk[(k,n)=p]\\
&=n\sum_{p|n}\sum_{k=1}^{\lfloor\frac{n}{p}\rfloor}k[(k,\frac{n}{p})=1]\\
&=n\sum_{p|n}\frac{\frac{n}{p}\phi(\frac{n}{p})+[\frac{n}{p}=1]}{2}\\
&=n\sum_{p|n}\frac{p\phi(p)+[p=1]}{2}
\end{align}
\]
用线性筛或者其他方法处理出\(\phi\)函数,调和级数的复杂度预处理,每次查表。或者枚举因子。
时间复杂度:\(O(n\log n)\)或\(O(n+t\sqrt{n})\)
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
#include<map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int miu[1000010];
int phi[1000010];
int p[1000010];
int b[1000010];
ll e[1000010];
ll f[1000010];
int cnt;
int maxn=1000000;
map<int,ll> d;
void init()
{
	memset(b,0,sizeof b);
	int i,j;
	cnt=0;
	for(i=2;i<=maxn;i++)
	{
		if(!b[i])
		{
			p[++cnt]=i;
			miu[i]=-1;
			phi[i]=i-1;
		}
		for(j=1;j<=cnt&&i*p[j]<=maxn;j++)
		{
			b[i*p[j]]=1;
			if(i%p[j]==0)
			{
				miu[i*p[j]]=0;
				phi[i*p[j]]=phi[i]*p[j];
				break;
			}
			miu[i*p[j]]=-miu[i];
			phi[i*p[j]]=phi[i]*phi[p[j]];
		}
	}
	e[1]=1;
	for(i=2;i<=maxn;i++)
		e[i]=(ll(i)*phi[i])/2;
	for(i=1;i<=maxn;i++)
		for(j=i;j<=maxn;j+=i)
			f[j]+=e[i];
}
void solve()
{
	int n;
	scanf("%d",&n);
	printf("%lld\n",f[n]*n);
}
int main()
{
//	freopen("a.in","r",stdin);
//	freopen("a.out","w",stdout);
	init();
	int t;
	scanf("%d",&t);
	while(t--)
		solve();
	return 0;
}
【XSY2470】lcm 数学的更多相关文章
- hdu 4497 GCD and LCM 数学
		GCD and LCM Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4 ... 
- Codeforces Round #613 (Div. 2) C. Fadi and LCM  (数学)
		题意:给你一个正整数\(x\),找两个正整数\(a\),\(b\),使得\(lcm(a,b)=x\),并且\(max(a,b)\)最小. 题解:我们知道,\(lcm(a,b)=a*b/gcd(a,b) ... 
- Codeforces #6241 div2 C. Orac and LCM  (数学)
		题意:给你一个数列,求所有子序列对的\(lcm\),然后求这些所有\(lcm\)的\(gcd\). 题解:我们对所有数分解质因数,这里我们首先要知道一个定理:  对于\(n\)个数,假如某个质数\( ... 
- 一位学长的ACM总结(感触颇深)
		发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ... 
- acdream.LCM Challenge(数学推导)
		LCM Challenge Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & %llu Submit ... 
- UVA 10892  LCM Cardinality  数学
		A pair of numbers has a unique LCM but a single number can be the LCM of more than one possiblepairs ... 
- HDU 5584 LCM Walk 数学
		LCM Walk Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5584 ... 
- Codeforces Round #328 (Div. 2) C. The Big Race 数学.lcm
		C. The Big Race Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/592/probl ... 
- hdu 5584 LCM Walk(数学推导公式,规律)
		Problem Description A frog has just learned some number theory, and can't wait to show his ability t ... 
随机推荐
- p201  谱集是闭集 有界集
			1 是如何来的? 由1 如何推出 2 2 是如何来的?谢谢 1.σ是的补集 入属于ρ 稠密是因为 T有定义的地方,λI-T都有定义,有界是因为 所以 然后 ρ是σ的补集 模比||T||大的数都 ... 
- Jmeter之发送请求入参必须使用编码格式、Jmeter之发送Delete请求可能入参需要使用编码格式
			这里的其中一个属性值必须要先编码再传参才可以,具体可以通过抓包分析观察: 
- semantic-ui 下拉框
			注意:在使用semantic的下拉框的时候,不仅需要引入semantic.css,还要引入semantic.js,最重要的是引入jquery.否则下拉效果不会显示. 并且,jquery必须先于sema ... 
- laravel依赖注入 容器
			[看完就懂]Laravel 服务容器,IoC,DI DI DI就是常说的依赖注入,那么究竟什么是依赖注入呢? 打个比方,电脑(非笔记本哈)需要键盘和鼠标我们才能进行操作,这个‘需要’换句话说 ... 
- Oracle 不小心删除undo数据文件以及磁盘空间不足导致不能登录的解决办法
			在一次测试中,由于导入的数据量过大导致事务一直提交失败因为磁盘空间不够用了,一检查发现是undo表空间不够用,于是重新创建了一个表空间,准备把之前的undo表空间删除,删除时却发现一直删不掉,因为它一 ... 
- 动态SQL3
			Oracle的批量操作 Oracle不支持VALUES(),(),()这种方式,所以不能用上一节所讲的方法. 有时候业务会包含很多次数据库操作,为了减少数据库连接,我们会选择一次提交大量sql, 这时 ... 
- Hbase存储流程
- SQL之CASE WHEN用法详解[1]
			简单CASE WHEN函数: CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' E ... 
- flask保存 文件到本地
			本篇队长介绍一下如何 把前端上传的文件保存 到 后端flask项目目录 首先讲一下上传.保存文件的思路: 第一步:前端通过post请求方式提交上传的文件 <input id="file ... 
- 三、zookeeper安装
			一.简介 二.下载解压: #wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar ... 
