51nod 1220 约数之和【莫比乌斯反演+杜教筛】
首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证
然后开始推:
\]
\]
\]
方便起见设\( f(n)=\sum_{i=1}^{n}i \)
\]
\]
\]
\]
这个样子显然可以用杜教筛了,但是注意到后面有两个求和式,可能会增大常数(但是也不会T啦),所以考虑这两个求和式的关系:
\]
\]
\]
\]
所以这两个式子是一样的!于是就变成了:
\]
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=1000005,inv2=500000004,mod=1e9+7;
int m,mb[N],q[N],tot;
long long n,s[N],ans,ha[N];
bool v[N];
long long slv(long long n)
{
return n*(n+1)%mod*inv2%mod;
}
long long wk(long long x)
{
if(x<=m)
return s[x];//cout<<x<<endl;
if(ha[n/x])
return ha[n/x];
long long re=1ll;
for(int i=2,la;i<=x;i=la+1)
{
la=x/(x/i);
re=(re-(slv(la)-slv(i-1))*wk(x/i)%mod)%mod;
}
return ha[n/x]=re;
}
long long clc(long long n)
{
long long re=0ll;
for(int i=1,la;i<=n;i=la+1)
{
la=n/(n/i);
re=(re+(la-i+1)*slv(n/i)%mod)%mod;
}
return re;
}
int main()
{
scanf("%lld",&n);
m=(int)ceil(pow((int)n,2.0/3));
mb[1]=1;
for(int i=2;i<=m;i++)
{
if(!v[i])
{
q[++tot]=i;
mb[i]=-1;
}
for(int j=1;j<=tot&&q[j]*i<=m;j++)
{
int k=i*q[j];
v[k]=1;
if(i%q[j]==0)
{
mb[k]=0;
break;
}
mb[k]=-mb[i];
}
}
for(int i=1;i<=m;i++)
s[i]=(s[i-1]+i*mb[i])%mod;
//cout<<wk(102)<<" "<<wk(101)<<endl;
for(int i=1,la;i<=n;i=la+1)
{
la=n/(n/i);
long long ml=clc(n/i);//if(i!=1)cout<<i-1<<" "<<n/(i-1)<<endl<<la<<" "<<n/la<<endl;
ans=(ans+(wk(la)-wk(i-1))*ml%mod*ml%mod)%mod;
}
printf("%lld",(ans%mod+mod)%mod);
return 0;
}
51nod 1220 约数之和【莫比乌斯反演+杜教筛】的更多相关文章
- 51NOD 1222 最小公倍数计数 [莫比乌斯反演 杜教筛]
1222 最小公倍数计数 题意:求有多少数对\((a,b):a<b\)满足\(lcm(a,b) \in [1, n]\) \(n \le 10^{11}\) 卡内存! 枚举\(gcd, \fra ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
- 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛
题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...
- [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)
[BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...
- 51nod 1237 最大公约数之和 V3【欧拉函数||莫比乌斯反演+杜教筛】
用mu写lcm那道卡常卡成狗(然而最后也没卡过去,于是写一下gcd冷静一下 首先推一下式子 \[ \sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j) \] \[ \sum_{i= ...
- 51Nod.1237.最大公约数之和 V3(莫比乌斯反演 杜教筛 欧拉函数)
题目链接 \(Description\) \(n\leq 10^{10}\),求 \[\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)\ mod\ (1e9+7)\] \(Soluti ...
- 牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11174/F 题目大意 给出\(n,k\)求 \[\sum_{i_1=1}^n\sum_{i_2=1}^n.. ...
- 【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛
Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...
- 【CCPC-Wannafly Winter Camp Day3 (Div1) F】小清新数论(莫比乌斯反演+杜教筛)
点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...
随机推荐
- CodeForces 599A Patrick and Shopping
水题.每种情况取最小值即可. #include<cstdio> #include<cstring> #include<cmath> #include<algo ...
- 洛谷——P2916 [USACO08NOV]为母牛欢呼Cheering up the Cows
https://www.luogu.org/problem/show?pid=2916 题目描述 Farmer John has grown so lazy that he no longer wan ...
- codeforces 873E(枚举+rmq)
题意 有n(n<=3000)个人参与acm比赛,每个人都有一个解题数,现在要决定拿金牌的人数cnt1,拿银牌的人数cnt2,拿铜牌的人数cnt3,各自对应一个解题数区间[d1,c1],[d2,c ...
- QT程序--小工具集合
这是在大一第一学期时写的参加程序设计大赛的作品,当时参加的时候仅仅只有贪吃蛇,迷宫算法和文件加密这三个功能,而且当时的界面并没有进行任何美化,现在想起来有点可惜.然而这并不是一个只写一遍的软件,在后期 ...
- IOS开发 Block的学习
苹果公司正在大力推广Block块语法的使用,据说Block会迟早取代一般协议代理的使用. Block最大的作用是函数回调,简化代码. 在ios中,将blocks当成对象来处理,它封装了一段代码,这段代 ...
- HOST绑定和VIP映射
今天上线需要配置RAL,处理半天,发现是需要HOST和IP分开来配. 比如: curl -H "Host: ktvin.nuomi.com" "http://10.207 ...
- 关于Android Service真正的全然具体解释,你须要知道的一切
转载请注明出处(万分感谢! ): http://blog.csdn.net/javazejian/article/details/52709857 出自[zejian的博客] Service全部内 ...
- MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍
近期有个开发团队抱怨我们平台包括的mysql cluster不行,总是报mysql的"heartbeat Error".分析了他们收集的日志.没有发现mysql cluster节点 ...
- Python - 多次检查后缀名(endwith)
在通过后缀名查找类型文件的时候, 多次使用endwith, 使用元组(tuple), 简化操作. 此类方式, 也能够应用于if语句多次类似检測. 代码 # 列出目录内全部代码 def list_dic ...
- ASP.NET Web Pages - 教程
ASP.NET Web Pages - 教程 ASP.NET 是一个使用 HTML.CSS.JavaScript 和服务器脚本创建网页和网站的开发框架. ASP.NET 支持三种不同的开发模式:Web ...