P3911 最小公倍数之和
终于找到了一个只会用[gcd(i,j)==1] = sigema d|gcd(i,j) mu(d) 做不了的题。
考虑枚举gcd后。

此时,ans可以表示为一个 sigema x f(x)的形式。
考虑对反演f(x)。

然后发现f(x)也很容易在nlogn的复杂度内算出来,就做完了。
#include<bits/stdc++.h>
#define N 110000
#define eps 1e-7
#define inf 1e9+7
#define db double
#define ll long long
#define ldb long double
using namespace std;
inline ll read()
{
	char ch=0;
	ll x=0,flag=1;
	while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}
	while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
	return x*flag;
}
bool is_prime[N];
ll a[N],f[N],mu[N],prime[N];
void solve(ll n)
{
	memset(is_prime,true,sizeof(is_prime));
	is_prime[0]=is_prime[1]=false;mu[0]=mu[1]=1;
	for(ll i=2,cnt=0;i<=n;i++)
	{
		if(is_prime[i])prime[++cnt]=i,mu[i]=-1;
		for(ll j=1;j<=cnt;j++)
		{
			if(i*prime[j]>n)break;
			is_prime[i*prime[j]]=false;
			if(i%prime[j])mu[i*prime[j]]=-mu[i];
			else{mu[i*prime[j]]=0;break;}
		}
	}
}
int main()
{
	ll n=read(),len=5e4;solve(len);
	for(ll i=1;i<=n;i++)a[read()]++;
	for(ll i=1;i<=len;i++)
	{
		for(ll j=i;j<=len;j+=i)f[i]+=a[j]*j;
		f[i]*=f[i];
	}
	ll ans=0;
	for(ll i=1;i<=len;i++)
	{
		ll tot=0;
		for(ll j=i;j<=len;j+=i)tot+=mu[j/i]*f[j];
		ans+=tot/i;
	}
	printf("%lld",ans);
	return 0;
}
P3911 最小公倍数之和的更多相关文章
- 51NOD 1238 最小公倍数之和 V3 [杜教筛]
		1238 最小公倍数之和 V3 三种做法!!! 见学习笔记,这里只贴代码 #include <iostream> #include <cstdio> #include < ... 
- 51nod1363 最小公倍数之和
		题目描述 给出一个n,求1-n这n个数,同n的最小公倍数的和. 例如:n = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30,6,加在一起 = 66. 由于结果很大,输出Mo ... 
- 51nod 1238 最小公倍数之和 V3
		51nod 1238 最小公倍数之和 V3 求 \[ \sum_{i=1}^N\sum_{j=1}^N lcm(i,j) \] \(N\leq 10^{10}\) 先按照套路推一波反演的式子: \[ ... 
- 51nod 1190 最小公倍数之和 V2
		给出2个数a, b,求LCM(a,b) + LCM(a+1,b) + .. + LCM(b,b). 例如:a = 1, b = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30 ... 
- 51nod 1363 最小公倍数之和  ——欧拉函数
		给出一个n,求1-n这n个数,同n的最小公倍数的和.例如:n = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30,6,加在一起 = 66. 由于结果很大,输出Mod 1000 ... 
- 51Nod 最大公约数之和V1,V2,V3;最小公倍数之和V1,V2,V3
		1040 最大公约数之和 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 输入 1个数N ... 
- Solution -「洛谷 P3911」最小公倍数之和
		\(\mathcal{Description}\) Link. 给定 \(\{a_n\}\),求: \[\sum_{i=1}^n\sum_{j=1}^n\operatorname{lcm}(a ... 
- BNU 12846 LCM Extreme 最小公倍数之和(线性欧拉筛选+递推)
		LCM Extreme Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Orig ... 
- 51 NOD 1238 最小公倍数之和 V3
		原题链接 最近被51NOD的数论题各种刷……(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解……那么既然A了就来骗一波访问量吧…… (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧…… ... 
随机推荐
- SpringBoot 解决HttpServletRequest只能读取一次
			业务逻辑,通过filter读取请求的request,获取token,并将token传递后面流程使用 BodyReaderHttpServletRequestWrapper: public class ... 
- 【做题】sgu189 Perl-like Substr——dark模拟
			注:这篇博客纯属为凑篇数而生. 题面较长,幸运的是,网上给出了相当不错的翻译. 需要支持的操作很简单,即对子串提取.赋值和输出,且对时间复杂度没有要求.换言之此题有成为块链毒瘤题的潜质.难点在于输入的 ... 
- C语言变量的作用域和存储类型
			1.动态局部变量:也称局部变量.自动变量,是指在函数内部定义的自动变量,不带static修饰,作用域是定义该变量的子程序.在退出函数后,变量自带内存会自动释放. 2.静态局部变量:是指在函数内部定义的 ... 
- python运维小技巧
			以下实验均在Linux上进行 1.一秒钟启动一个下载服务器 python版本 python2: #python -m SimpleHTTPServer Serving HTTP on 0.0.0.0 ... 
- 【Selenium2】【selenium之 定位以及切换frame(iframe)】
			参考:http://blog.csdn.net/huilan_same/article/details/52200586 总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切, ... 
- 理解 Redis(5) - 哈希值
			哈希值存储示意图:首先, 我想先认真理解一下哈希值的数据结构:前面讲过, redis 存储的是键值对, 键永远都是可以打印的 ASCII 码, 值是字符串, 或者是以其他形式包裹的字符串. 上两节介绍 ... 
- JS绘制拓扑图示例 (JTopo)
			目前在做的项目是渔政的监控,需要用到的设备包括雷达,光电,站点信息等,想要更直观的展现设备之间的连接关系和状态信息,这时候需要画一张拓扑图 在做拓扑图之前,首先要学习一下,html里面另一个比较常用的 ... 
- python连接MongoDB(无密码无认证)
			无密码无认证下连接 from pymongo import MongoClient host = '127.0.0.1' # 你的ip地址 client = MongoClient(host, ) # ... 
- config配置
			<?php /** * User: Eden * Date: 2019/3/30 * 共有内容 */ /** CREATE TABLE `tf_configs` ( `id` int(11) N ... 
- python 修改excel
			操作描述:需要实现数据不断写入的功能,首先,在固定位置建立一个空白的xls文件:其次,每次产生的数据先判断该xls已有几列数据,后缀上去. 具体过程: 要保证具有三个包,是xlrd,xlwt,xlut ... 
