[51Nod 1220] - 约数之和 (杜教筛)
题面
令d(n)d(n)d(n)表示nnn的约数之和求
∑i=1n∑j=1nd(ij)\large\sum_{i=1}^n\sum_{j=1}^nd(ij)i=1∑nj=1∑nd(ij)
题目分析
先给结论
d(ij)=∑x∣i∑y∣jxj/y[(x,y)==1]\large d(ij)=\sum_{x|i}\sum_{y|j}xj/y[(x,y)==1]d(ij)=x∣i∑y∣j∑xj/y[(x,y)==1]
可以通过 传送门 类似的证明方法证明
拖更…
AC code
#include <cstdio>
#include <map>
#include <algorithm>
using namespace std;
typedef long long LL;
const int MAXN = 1e6 + 1, mod = 1e9 + 7;
int Prime[MAXN/10], Cnt, mu[MAXN];
bool IsnotPrime[MAXN];
inline void init(int n)
{
mu[1] = 1;
for(int i = 2; i <= n; ++i)
{
if(!IsnotPrime[i])
Prime[++Cnt] = i, mu[i] = -1;
for(int j = 1, v; j <= Cnt && i * Prime[j] <= n; ++j)
{
v = i * Prime[j];
IsnotPrime[v] = 1;
if(i % Prime[j] == 0) { mu[v] = 0; break; }
mu[v] = -mu[i];
}
}
for(int i = 1; i <= n; ++i)
mu[i] = (mu[i-1] + i*mu[i]%mod) % mod;
}
map<int, int>s;
inline int f(int i, int j) //i+(i+1)+...+j
{
return ((LL)(i+j) * (j-i+1)/2) % mod;
}
inline int sum(int n) //mu(1)1+mu(2)2+...+mu(n)n
{
if(n < MAXN) return mu[n];
if(s.count(n)) return s[n];
int ret = 1;
for(int i = 2, j; i <= n; i=j+1)
{
j = n/(n/i);
ret = (ret - (LL)f(i,j) * sum(n/i) % mod) % mod;
}
return s[n]=ret;
}
inline int calc(int n)
{
int ret = 0, k;
for(int i = 1, j; i <= n; i=j+1)
{
j = n/(n/i); k = n/i;
ret = (ret + (LL)(j-i+1) * (((LL)k*(k+1)/2)%mod) % mod) % mod;
}
return ret;
}
inline int solve(int n)
{
int ret = 0, last = 0, tmp, tmp2;
for(int i = 1, j; i <= n; i=j+1)
{
tmp = sum(j = n/(n/i)), tmp2 = calc(n/i), tmp2 = (LL)tmp2 * tmp2 % mod;
ret = (ret + (LL)(tmp - last) * tmp2 % mod) % mod;
last = tmp;
}
return ret;
}
int main ()
{
int n; init(MAXN-1);
scanf("%d", &n);
printf("%d\n", (solve(n)+mod)%mod);
}
[51Nod 1220] - 约数之和 (杜教筛)的更多相关文章
- 51NOD 1220 约数之和 [杜教筛]
1220 约数之和 题意:求\(\sum_{i=1}^n \sum_{j=1}^n \sigma_1(ij)\) \[ \sigma_0(ij) = \sum_{x\mid i}\sum_{y\mi ...
- 51nod 1220 约数之和【莫比乌斯反演+杜教筛】
首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...
- 【51nod】1239 欧拉函数之和 杜教筛
[题意]给定n,求Σφ(i),n<=10^10. [算法]杜教筛 [题解] 定义$s(n)=\sum_{i=1}^{n}\varphi(i)$ 杜教筛$\sum_{i=1}^{n}(\varph ...
- 51Nod.1244.莫比乌斯函数之和(杜教筛)
题目链接 map: //杜教筛 #include<map> #include<cstdio> typedef long long LL; const int N=5e6; in ...
- [51Nod 1237] 最大公约数之和 (杜教筛+莫比乌斯反演)
题目描述 求∑i=1n∑j=1n(i,j) mod (1e9+7)n<=1010\sum_{i=1}^n\sum_{j=1}^n(i,j)~mod~(1e9+7)\\n<=10^{10}i ...
- 【51nod-1239&1244】欧拉函数之和&莫比乌斯函数之和 杜教筛
题目链接: 1239:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 1244:http://www.51nod. ...
- 51 NOD 1239 欧拉函数之和(杜教筛)
1239 欧拉函数之和 基准时间限制:3 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目.此函数以其首名研究 ...
- 51 NOD 1244 莫比乌斯函数之和(杜教筛)
1244 莫比乌斯函数之和 基准时间限制:3 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens) ...
- 51nod1244 莫比乌斯函数之和 杜教筛
虽然都写了,过也过了,还是觉得杜教筛的复杂度好玄学 设f*g=h,∑f=S, 则∑h=∑f(i)S(n/i下取整) 把i=1时单独拿出来,得到 S(n)=(∑h-∑2->n f(i)S(n/i下 ...
随机推荐
- a++与++a,谈谈C++的参数传递
先看一段代码: #include<iostream> using namespace std; void func(int a, int b) { cout << a < ...
- 全能中间件v19.5.7 正式版发布
v19.5.7 更新=========================1.新增 支持更多微信公众号API.2.优化 AccessToken 刷新机制.3.修复 微信公众号“消息加解密方式”为“安全模式 ...
- System.Web.NullPointerException
在.Net异步webApi中我们需要记录日志信息,需要获取客户端的ip地址,我们需要使用:HttpContext.Current.Request.ServerVariables["REMOT ...
- 2.NET Core设定数据库种子
1.使用以下代码在 Models 文件夹中创建一个名为 SeedData 的新类: using Microsoft.EntityFrameworkCore;using Microsoft.Extens ...
- 静态工具类注入service的方法
http://blog.sina.com.cn/s/blog_6e2d53050102wl3x.html
- this指向详解及改变它的指向的方法
一.this指向详解(彻底理解js中this的指向,不必硬背) 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是 ...
- Vue父子,子父,非父子组件之间传值
Vue组件基础 纯属随笔记录,具体详细教程,请查阅vue.js网站 子组件给父组件传值: <body> <div id="app"> <my-app& ...
- unnitest+HtmlRunner生成测试报告
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/5/5 21:23 # @Author : ChenAdong # @emai ...
- 【OGG】OGG的单向复制配置-支持DDL(二)
[OGG]OGG的单向复制配置-支持DDL(二) 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的 ...
- Vue+Django项目部署
本地项目配置 1 复制 luffy/settings/dev.py为prop.py 修改luffy/settings/prop.py中以下几项 (1) allow_hosts ALLOWED_HOST ...