Code:

#include <bits/stdc++.h>
#include <tr1/unordered_map> #define setIO(s) freopen(s".in","r",stdin)
#define ll long long
#define ull unsigned long long
#define maxn 10000000
#define mod 1000000007
#define inv 500000004 using namespace std;
using namespace tr1;
int vis[maxn],prime[maxn],tot;
ll phi[maxn];
unordered_map<ll,ull>ansphi;
void init(){
phi[1] = 1;
for(int i=2;i<maxn; ++i) {
if(!vis[i]) prime[++tot]=i,phi[i] = i-1;
for(int j=1;j<=tot&&i*prime[j]<maxn;++j) {
vis[i*prime[j]]=1;
if(i%prime[j]!=0) phi[i*prime[j]]=phi[i]*(prime[j]-1);
else {
phi[i*prime[j]]=phi[i]*(prime[j]);
break;
}
}
}
for(int i=1;i<maxn;++i) phi[i]+=phi[i-1],phi[i]%=mod;
}
ll solve(ll n){
if(n < maxn) return phi[n];
if(ansphi[n]) return ansphi[n];
ll ans=(ull)(((n%mod)*((n+1)%mod) %mod)*(inv%mod))%mod;
ll ans2=0;
for(ll l=2,r;l<=n;l=r+1) {
r=n/(n/l);
ans2+=(ll)(r-l+1)*solve(n/l);
ans2%=mod;
}
return ansphi[n]=(ans+mod-ans2)%mod;
}
int main(){
//setIO("input");
init();
ll n,ans=0,ans1,tmp;
scanf("%lld",&n);
for(ll l=1,r;l<=n;l=r+1){
r=(n/(n/l));
ans+=(((n/l)%mod)*((n/l)%mod)%mod*(solve(r)+mod-solve(l-1))%mod)%mod;
ans%=mod;
}
printf("%lld",ans);
return 0;
}

  

51nod 237 最大公约数之和 V3 杜教筛的更多相关文章

  1. 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 ...

  2. 【51nod】1238 最小公倍数之和 V3 杜教筛

    [题意]给定n,求Σi=1~nΣj=1~n lcm(i,j),n<=10^10. [算法]杜教筛 [题解]就因为写了这个非常规写法,我折腾了3天…… $$ans=\sum_{i=1}^{n}\s ...

  3. 51nod 1244 莫比乌斯函数之和 【杜教筛】

    51nod 1244 莫比乌斯函数之和 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.具体定义如下: 如果一个数包含 ...

  4. 51nod 1244 莫比乌斯函数之和(杜教筛)

    [题目链接] http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 [题目大意] 计算莫比乌斯函数的区段和 [题解] 利 ...

  5. [51Nod1238]最小公倍数之和 V3[杜教筛]

    题意 给定 \(n\) ,求 \(\sum_{i=1}^n \sum_{j=1}^n lcm(i,j)\). \(n\leq 10^{10}\) 分析 推式子 \[\begin{aligned} an ...

  6. 51NOD 1238 最小公倍数之和 V3 [杜教筛]

    1238 最小公倍数之和 V3 三种做法!!! 见学习笔记,这里只贴代码 #include <iostream> #include <cstdio> #include < ...

  7. 51 Nod 1238 最小公倍数之和 V3 杜教筛

    题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1238 题意:求$\sum_{i=1}^{n}\sum_{j=1}^{n}l ...

  8. 51nod 1237 最大公约数之和 V3(杜教筛)

    [题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1237 [题目大意] 求[1,n][1,n]最大公约数之和 ...

  9. 51Nod.1237.最大公约数之和 V3(莫比乌斯反演 杜教筛 欧拉函数)

    题目链接 \(Description\) \(n\leq 10^{10}\),求 \[\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)\ mod\ (1e9+7)\] \(Soluti ...

随机推荐

  1. VS Code中编写html(3) 标签的宽高颜色背景设置

    1 创建一个div标签: <body> <div> 这是一个div标签: </div> </body> 变成了圆圆的,是因为后面有设置了样式: back ...

  2. WIN 10 增删输入法

    第一步: 任务栏右击 “语言——设置” 第二步: 第三步: 删除或者增加就好.

  3. C++继承与组合

    转自https://blog.csdn.net/caoyan_12727/article/details/52337297 类的组合和继承一样,是软件重用的重要方式.组合和继承都是有效地利用已有类的资 ...

  4. windows端口被占用解决办法

    1.查找端口 netstat -ano | findstr 端口号 2.进程列表并查找相应的进程 tasklist |findstr 进程号 3.杀死进程 taskkill /f /t /im 进程名 ...

  5. Centos7安装keepalived(自定义路径安装)-高级篇

    0.Keepalived介绍 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat.corosync.pacemaker.但 ...

  6. JQueryEsayUI的datagrid分页

    1. jsp页面 <%@ page language="java" import="java.util.*" pageEncoding="utf ...

  7. 网络教程(7)OSI模型的低层模型

    OSI Model——Open System Interconnection Model 开放系统互联模型

  8. 【UOJ139】【UER #4】被删除的黑白树

    题意: 很久很久以前,有一棵树加入了 UOJ 群. 这天,在它讨论“一棵树应该怎么旋转”的时候一不小心被删除了,变成了被删除的树. 突然间,它突然发现它失去了颜色,变成了一棵纯白的树.这让它感觉很焦躁 ...

  9. js中获取宽高

    <script type="text/javascript"> function getWH() { var a = ""; a += " ...

  10. nmon分析文件各sheet含义

    sheet名称sheet含义 SYS_SUMM系统汇总,蓝线为cpu占有率变化情况,粉线为磁盘IO的变化情况: AAA关于操作系统以及nmon本身的一些信息: BBBB系统外挂存储容量以及存储类型: ...