[51nod1238] 最小公倍数之和 V3(杜教筛)
题面
题解
懒了……这里写得挺好的……
//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define IT map<ll,int>::iterator
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=6e6+5,P=1e9+7,inv2=500000004,inv6=166666668;
bitset<N>vis;int p[N],phi[N],g[N],m,sqr;ll n;map<ll,int>mp;
inline int calc(R int x){return (1ll*x*(x+1)>>1)%P;}
inline int calc2(R int x){return 1ll*x*(x+1)%P*((x<<1)+1)%P*inv6%P;}
inline int calc3(R int x){x=calc(x);return 1ll*x*x%P;}
void init(int n){
	phi[1]=g[1]=1;
	fp(i,2,n){
		if(!vis[i])p[++m]=i,phi[i]=i-1,g[i]=1ll*phi[i]*i%P*i%P;
		for(R int j=1,k;j<=m&&1ll*i*p[j]<=n;++j){
			vis[k=i*p[j]]=1;
			if(i%p[j]==0){phi[k]=phi[i]*p[j],g[k]=1ll*phi[k]*k%P*k%P;break;}
			phi[k]=phi[i]*(p[j]-1),g[k]=1ll*g[i]*g[p[j]]%P;
		}
	}
	fp(i,2,n)(g[i]+=g[i-1])%=P;
}
int G(ll n){
	if(n<=sqr)return g[n];
	IT it=mp.find(n);
	if(it!=mp.end())return it->second;
	int res=calc3(n%P),las=1,now;
	for(ll i=2,j;i<=n;i=j+1)
		j=n/(n/i),now=calc2(j%P),res=(res-1ll*(now-las+P)*G(n/i)%P+P)%P,las=now;
	return mp[n]=res;
}
int main(){
//	freopen("testdata.in","r",stdin);
	scanf("%lld",&n),init(sqr=N-5);
	int res=0,las=0,now=0;
	for(R ll i=1,j;i<=n;i=j+1)
		j=n/(n/i),now=calc(j%P),(res+=1ll*(now-las+P)*G(n/i)%P)%=P,las=now;
	printf("%d\n",res);
	return 0;
}
												
											[51nod1238] 最小公倍数之和 V3(杜教筛)的更多相关文章
- [51Nod1238]最小公倍数之和 V3[杜教筛]
		
题意 给定 \(n\) ,求 \(\sum_{i=1}^n \sum_{j=1}^n lcm(i,j)\). \(n\leq 10^{10}\) 分析 推式子 \[\begin{aligned} an ...
 - 51NOD 1238 最小公倍数之和 V3 [杜教筛]
		
1238 最小公倍数之和 V3 三种做法!!! 见学习笔记,这里只贴代码 #include <iostream> #include <cstdio> #include < ...
 - 【51nod】1238 最小公倍数之和 V3 杜教筛
		
[题意]给定n,求Σi=1~nΣj=1~n lcm(i,j),n<=10^10. [算法]杜教筛 [题解]就因为写了这个非常规写法,我折腾了3天…… $$ans=\sum_{i=1}^{n}\s ...
 - 51 Nod 1238 最小公倍数之和 V3 杜教筛
		
题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1238 题意:求$\sum_{i=1}^{n}\sum_{j=1}^{n}l ...
 - 51NOD 1237 最大公约数之和 V3 [杜教筛]
		
1237 最大公约数之和 V3 题意:求\(\sum_{i=1}^n\sum_{j=1}^n(i,j)\) 令\(A(n)=\sum_{i=1}^n(n,i) = \sum_{d\mid n}d \c ...
 - [51Nod 1238] 最小公倍数之和 (恶心杜教筛)
		
题目描述 求∑i=1N∑j=1Nlcm(i,j)\sum_{i=1}^N\sum_{j=1}^Nlcm(i,j)i=1∑Nj=1∑Nlcm(i,j) 2<=N<=10102<=N ...
 - 51nod 237 最大公约数之和 V3 杜教筛
		
Code: #include <bits/stdc++.h> #include <tr1/unordered_map> #define setIO(s) freopen(s&q ...
 - 51nod1238 最小公倍数之和 V3 莫比乌斯函数 杜教筛
		
题意:求\(\sum_{i = 1}^{n}\sum_{j = 1}^{n}lcm(i, j)\). 题解:虽然网上很多题解说用mu卡不过去,,,不过试了一下貌似时间还挺充足的,..也许有时间用phi ...
 - 51nod 1244 莫比乌斯函数之和 【杜教筛】
		
51nod 1244 莫比乌斯函数之和 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.具体定义如下: 如果一个数包含 ...
 - 51nod 1244 莫比乌斯函数之和(杜教筛)
		
[题目链接] http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 [题目大意] 计算莫比乌斯函数的区段和 [题解] 利 ...
 
随机推荐
- Day2-Python基础2---浅copy、深copy的差别
			
浅copy 首先我们来看下面一段代码: 1 >>> names = ["maqing"," peilin"," xiaoming&q ...
 - showModalDialog()子窗口刷新父窗口
			
今天再次使用showModalDialog(),发现了两个问题,一是子窗口如何刷新父窗口,二是窗口的参数问题. 1 子窗口刷新父窗口 如果是window.open();问题就好办,直接用window. ...
 - Windows_Server_2008远程桌面多用户登陆的配置方法
			
开启远程桌面后,Windows Vista(或Windows 2008)下默认只支持一个administrator用户登陆,一个登录后另一个就被踢掉了,下面提供允许同一个用户名同时多个用户登录的配置方 ...
 - shell脚本 回顾 小练习
			
1.把/OPT目录下(包含子目录)下所有后缀为“.sh”的文件后缀变更为“.shell” 2.将A.B.C目录下的文件A1.A2.A3文件改名为A4.A5.A63.如何在vi模式下将文件中的aa字符串 ...
 - PowerDesigner CDM中取消默认不能存在同名主键的方法
			
This data item is already used in a primary identifier.Normalization rules prevent ... 处理的方法为: 菜单栏上的 ...
 - 2015.1.15 利用Oracle函数插入表结构 Bulk collect into 不用循环,简洁高效
			
如果表结构只对应一个字段,可以 select col1 bulk collect into 变量,不用游标循环,简洁高效 create or replace function get_airway_s ...
 - Winsock 示例
			
#include "stdafx.h" #include <Windows.h> #include <iostream> #pragma comment(l ...
 - 第五章 深入class文件结构(待续)
			
JVM指令集简介 class文件头的表示形式 常量池 类信息 Fields和Methods定义 类属性描述 Javap生成的class文件结构
 - Android WebView 捕捉点击的URL中的信息
			
项目要求,在WebView中点击搜索关键字,加载其他Web页面时,需要在一个文本输入框中,实时显示关键字 事实上,这种点击,是WebView内的,并没有跳出这个WebView,Activity也没有经 ...
 - with上下文管理基础
			
import queue import contextlib import time @contextlib.contextmanager def worker_state(xxx,val): xxx ...