题目描述

有N2−3N+2=∑d∣Nf(d)N^2-3N+2=\sum_{d|N} f(d)N2−3N+2=∑d∣N​f(d)

求∑i=1Nf(i)\sum_{i=1}^{N} f(i)∑i=1N​f(i)  mod 109+7~mod~10^9+7 mod 109+7

1&lt;=T&lt;=5001&lt;=N&lt;=1091&lt;=T&lt;=500\\1&lt;=N&lt;=10^91<=T<=5001<=N<=109

只有最多555组数据N&gt;106N&gt;10^6N>106

题目分析

f(n)=n2−3n+2−∑d∣n,d&lt;nf(d)∴S(n)=∑i=1n(i2−3i+2−∑d∣i,d&lt;if(d))                      =∑i=1ni2−3∑i=1ni+2n−∑k=2n∑d=1⌊nk⌋f(d)                    =∑i=1ni2−3∑i=1ni+2n−∑k=2nS(⌊nk⌋)                    =n(n+1)(n−4)3+2n−∑k=2nS(⌊nk⌋)
f(n)=n^2-3n+2-\sum_{d|n,d&lt;n}f(d)\\
\therefore S(n)=\sum_{i=1}^n(i^2-3i+2-\sum_{d|i,d&lt;i}f(d))\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\sum_{i=1}^ni^2-3\sum_{i=1}^ni+2n-\sum_{k=2}^n\sum_{d=1}^{\lfloor\frac nk\rfloor}f(d)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\sum_{i=1}^ni^2-3\sum_{i=1}^ni+2n-\sum_{k=2}^nS({\lfloor\frac nk\rfloor})\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\frac {n(n+1)(n-4)}3+2n-\sum_{k=2}^nS({\lfloor\frac nk\rfloor})
f(n)=n2−3n+2−d∣n,d<n∑​f(d)∴S(n)=i=1∑n​(i2−3i+2−d∣i,d<i∑​f(d))                      =i=1∑n​i2−3i=1∑n​i+2n−k=2∑n​d=1∑⌊kn​⌋​f(d)                    =i=1∑n​i2−3i=1∑n​i+2n−k=2∑n​S(⌊kn​⌋)                    =3n(n+1)(n−4)​+2n−k=2∑n​S(⌊kn​⌋)

如此一来就可以杜教筛了,然而仅仅这样还是会T,于是我们在想一想如何筛出前面一部分的fff值

令g(n)=n2−3n+2g(n)=n^2-3n+2g(n)=n2−3n+2,根据莫比乌斯反演

∴f(n)=∑d∣nμ(⌊nd⌋)g(d)
\therefore f(n)=\sum_{d|n}\mu(\lfloor\frac nd\rfloor)g(d)
∴f(n)=d∣n∑​μ(⌊dn​⌋)g(d)

于是用Θ(106ln(106))\Theta (10^6ln(10^6))Θ(106ln(106))筛出前10610^6106项就行了

总时间复杂度Θ(106ln(106)+T+5n23)\Theta(10^6ln(10^6)+T+5n^{\frac 23})Θ(106ln(106)+T+5n32​)

AC code:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
const int MAXN = 1000001;
const int mod = 1e9+7;
const int inv3 = 333333336; inline int g(int n)
{
return (1ll * n * n % mod - 3ll * n % mod + 2) % mod;
} int Prime[MAXN], Cnt, mu[MAXN], f[MAXN];
bool IsnotPrime[MAXN]; void init()
{
mu[1] = 1;
for(int i = 2; i < MAXN; ++i)
{
if(!IsnotPrime[i]) Prime[++Cnt] = i, mu[i] = -1;
for(int j = 1; j <= Cnt && i * Prime[j] < MAXN; ++j)
{
IsnotPrime[i * Prime[j]] = 1;
if(i % Prime[j] == 0)
{
mu[i * Prime[j]] = 0;
break;
}
mu[i * Prime[j]] = -mu[i];
}
}
for(int i = 1; i < MAXN; ++i)
for(int j = i; j < MAXN; j+=i)
f[j] = (f[j] + 1ll * mu[j/i] * g(i) % mod) % mod;
for(int i = 1; i < MAXN; ++i) f[i] = (f[i-1] + f[i]) % mod;
}
map<int,int>F;
inline int solve(int n)
{
if(n < MAXN) return f[n];
if(F.count(n)) return F[n];
int ret = (1ll * n * (n+1) % mod * (n-4) % mod * inv3 % mod + 2ll*n%mod) % mod;
for(int i = 2, j; i <= n; i=j+1)
{
j = n/(n/i);
ret = (ret - 1ll * (j-i+1) * solve(n/i) % mod) % mod;
}
return F[n]=ret;
} int main()
{
init();
int T, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
printf("%d\n", (solve(n)+mod)%mod);
}
}

[HDU 5608]Function(莫比乌斯反演 + 杜教筛)的更多相关文章

  1. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  2. 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛

    题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...

  3. [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

    [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...

  4. HDU 5608 function(莫比乌斯反演 + 杜教筛)题解

    题意: 已知\(N^2-3N+2=\sum_{d|N}f(d)\),求\(\sum_{i=1}^nf(i) \mod 1e9+7\),\(n\leq1e9\) 思路: 杜教筛基础题? 很显然这里已经设 ...

  5. 【CCPC-Wannafly Winter Camp Day3 (Div1) F】小清新数论(莫比乌斯反演+杜教筛)

    点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...

  6. 51nod 1237 最大公约数之和 V3【欧拉函数||莫比乌斯反演+杜教筛】

    用mu写lcm那道卡常卡成狗(然而最后也没卡过去,于是写一下gcd冷静一下 首先推一下式子 \[ \sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j) \] \[ \sum_{i= ...

  7. BSOJ5467 [CSPX2017#3]整数 莫比乌斯反演+杜教筛

    题意简述 给你两个整数\(n\),\(k\),让你求出这个式子 \[ \sum_{a_1=1}^n \sum_{a_2=a_1}^n \sum_{a_3=a_2}^n \cdots \sum_{a_k ...

  8. 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛

    题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...

  9. 牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11174/F 题目大意 给出\(n,k\)求 \[\sum_{i_1=1}^n\sum_{i_2=1}^n.. ...

随机推荐

  1. Centos7.5 添加环境变量并生效

    配置环境变量用户 jiangshan为例(base) [jiangshan@localhost ~]$ export PATH=$PATH:/usr/local/MATLAB/R2014a/bin/( ...

  2. [转帖]一文尽懂 USB4

    一文尽懂 USB4 https://www.ithome.com/0/451/062.htm 今年 3 月份,USB Promoter Group(领导小组)首次发布了 USB4 规范,即下一代 US ...

  3. 如何理解MVC

    在面试的时候,MVC这个概念考的次数很多,有许多人只能把三个字母解释成三个单词:model,view,controller,但是如果往深处说就说不出来什么东西了,对这个概念模糊不清,今天闲来无事看了一 ...

  4. Java基础IO类之字节数组流

    package IODemo; //字节数组流 :内部维护这着一个字节数组,我们可以利用流的读取机制来处理字符串 无需关闭,不会报IO异常 // ByteArrayInputstream ByteAr ...

  5. C#进阶系列——WebApi接口返回值类型详解

    阅读目录 一.void无返回值 二.IHttpActionResult 1.Json(T content) 2.Ok(). Ok(T content) 3.NotFound() 4.其他 5.自定义I ...

  6. Redis缓存如何保证一致性

    为什么使用Redis做缓存 MySQL缺点 单机连接数目有限 对数据进行写速度慢 Redis优点 内存操作数据速度快 IO复用,速度快 单线程模型,避免线程切换带来的开销,速度快 一致性问题 读数据的 ...

  7. List、dictionary、hashtable、ArrayList集合

    集合的引用命名空间在 system.Collections下 1.为什么引入集合 因为数组长度是固定的,为了建立一个动态的"数组",所以引入了集合. 2.为什么引入ArrayLis ...

  8. C#-Json-抽象类的反序列化

    引用: using System; using System.Collections.Generic; using Newtonsoft.Json; using Newtonsoft.Json.Lin ...

  9. 转 使用IParameterInspector, IOperationBehavior,Attribute(参数检查器、操作行为接口和标签)扩展WCF操作行为

    public class EntryIdInspector : IParameterInspector { public int intParamIndex { get; set; } string ...

  10. Python初识面向对象

    初识面向对象 面向过程 VS 面向对象 面向过程的圣墟设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西 优点是:极大的降低 ...