题意

出题人吃华 莱 士拉肚子了,心情不好,于是出了一道题面简单的难题。

T

T

T 组数据,对正整数

n

n

n 求

F

(

n

)

=

i

=

1

n

μ

2

(

i

)

i

F(n)=\sum_{i=1}^n \mu^2(i)i

F(n)=i=1∑n​μ2(i)i

2

64

2^{64}

264 取模的结果。

n

1

0

14

,

T

100.

n\leq 10^{14},T\leq100.

n≤1014,T≤100.

题解

莫比乌斯函数的平方,说明我们求的是

1

n

1\sim n

1∼n 中所有无多个完全平方数因子的数的和。

我们用总和减去存在多个完全平方数因子的数,令

s

u

m

(

x

)

=

x

(

x

+

1

)

2

sum(x)=\frac{x(x+1)}{2}

sum(x)=2x(x+1)​,枚举最大完全平方数因子,可得

F

(

n

)

=

s

u

m

(

n

)

j

=

2

n

j

2

F

(

n

j

2

)

F(n)=sum(n)-\sum_{j=2}^{\sqrt n}j^2F(\lfloor\frac{n}{j^2}\rfloor)

F(n)=sum(n)−j=2∑n

​​j2F(⌊j2n​⌋)

于是,我们得到一个同

M

i

n

25

Min25

Min25 筛复杂度的做法,但是过不了。

考虑到枚举最大完全平方数因子太苛刻了,我们就直接枚举完全平方数因子,然后容斥。

具体地,对于每个质数,减去该质数平方的所有倍数,在对于每两个质数,加上平方之积的所有倍数……

这其实等价于对于每个数

i

i

i ,加上

μ

(

i

)

\mu(i)

μ(i) 乘该数平方的所有倍数,于是可得

F

(

n

)

=

j

=

1

n

μ

(

j

)

j

2

s

u

m

(

n

j

2

)

F(n)=\sum_{j=1}^{\sqrt n}\mu(j)j^2sum(\lfloor\frac{n}{j^2}\rfloor)

F(n)=j=1∑n

​​μ(j)j2sum(⌊j2n​⌋)

这已经是十分优秀的

O

(

T

n

)

O(T\sqrt n)

O(Tn

​) 复杂度了,但是还是过不了。

我们发现对于许多段连续的

j

j

j ,

n

j

2

\frac{n}{j^2}

j2n​ 的值是相等的,而且,对于

j

n

1

3

j\leq n^{\frac{1}{3}}

j≤n31​ ,

n

j

2

\lfloor\frac{n}{j^2}\rfloor

⌊j2n​⌋ 只有

n

1

3

n^{\frac{1}{3}}

n31​ 种取值,对于

j

>

n

1

3

j>n^{\frac{1}{3}}

j>n31​ ,

n

j

2

<

n

1

3

\lfloor\frac{n}{j^2}\rfloor<n^{\frac{1}{3}}

⌊j2n​⌋<n31​,因为下取整,同样只有

n

1

3

n^{\frac{1}{3}}

n31​ 种取值。

所以我们数论分块,时间复杂度是

O

(

T

n

1

3

)

O(Tn^{\frac{1}{3}})

O(Tn31​) 。

CODE

#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<random>
#include<vector>
#include<bitset>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 10000005
#define LL long long
#define ULL unsigned long long
#define DB double
#define lowbit(x) (-(x) & (x))
#define ENDL putchar('\n')
#define FI first
#define SE second
LL read() {
LL f=1,x=0;int s = getchar();
while(s < '0' || s > '9') {if(s<0)return -1;if(s=='-')f=-f;s = getchar();}
while(s >= '0' && s <= '9') {x = (x<<3) + (x<<1) + (s^48); s = getchar();}
return f*x;
}
void putpos(LL x) {if(!x)return ;putpos(x/10);putchar('0'+(x%10));}
void putnum(LL x) {
if(!x) {putchar('0');return ;}
if(x<0) {putchar('-');x = -x;}
return putpos(x);
}
void AIput(LL x,int c) {putnum(x);putchar(c);} int n,m,s,o,k;
const LL MX = 10000000;
ULL f[MAXN],mu[MAXN],su[MAXN];
int p[MAXN/2],cnt;
bool v[MAXN];
void sieve(int n) {
f[1] = 1;mu[1] = 1;
for(int i = 2;i <= n;i ++) {
if(!v[i]) p[++ cnt] = i,f[i] = i,mu[i] = 0ull-1ull;
for(int j = 1;j <= cnt && i*p[j] <= n;j ++) {
v[i*p[j]] = 1;
if(i % p[j] == 0) {f[i*p[j]] = 0;break;}
f[i*p[j]] = f[i]*p[j];
mu[i*p[j]] = 0ull-mu[i];
}
}
for(int i = 2;i <= n;i ++) f[i] += f[i-1];
for(int i = 1;i <= n;i ++) su[i] = su[i-1] + mu[i]*i*i;
return ;
}
ULL sm(LL x) {return (x&1) ? (((x+1)>>1) * x) : ((x>>1) * (x+1));}
ULL F(LL x) {
if(x < 1) return 0;
if(x <= MX) return f[x];
ULL rs = 0;
for(LL i = 1;i*1ll*i <= x;i ++) {
LL r = sqrt((DB)x/(x/(i*1ll*i)));
rs += sm(x/(i*1ll*i)) * (su[r] - su[i-1]);
i = r;
}
return rs;
}
int main() {
freopen("kfc.in","r",stdin);
freopen("kfc.out","w",stdout);
sieve(MX);
int T = read();
while(T --) {
LL N = read();
printf("%llu\n",F(N));
}
return 0;
}

【NOI P模拟赛】华莱士CNHLS(容斥,数论分块)的更多相关文章

  1. 洛谷P2260 [清华集训2012]模积和(容斥+数论分块)

    题意 https://www.luogu.com.cn/problem/P2260 思路 具体思路见下图: 注意这个模数不是质数,不能用快速幂来求逆元,要用扩展gcd. 代码 #include< ...

  2. 【NOI P模拟赛】最短路(树形DP,树的直径)

    题面 给定一棵 n n n 个结点的无根树,每条边的边权均为 1 1 1 . 树上标记有 m m m 个互不相同的关键点,小 A \tt A A 会在这 m m m 个点中等概率随机地选择 k k k ...

  3. LOJ575. 「LibreOJ NOI Round #2」不等关系 [容斥,分治FFT]

    LOJ 思路 发现既有大于又有小于比较难办,使用容斥,把大于改成任意减去小于的. 于是最后的串就长成这样:<<?<?<??<<<?<.我们把一段连续的& ...

  4. 【NOI P模拟赛】(要素过多的标题)(容斥原理)

    题面 0 题目背景 [ 数   据   删   除 ] _{^{[数\,据\,删\,除]}} [数据删除]​ 1 题目描述 在执行任务时,收集到了 n n n 份能源,其中第 i i i 份的能量值是 ...

  5. [NOI P模拟赛] 传统艺能(子序列自动机、矩阵乘法,线段树)

    (2:00)OID:"完了,蓝屏了!"(代码全消失) 众人欢呼 OID:开机,"原题测试--" (30min later)OID 开始传统艺能: " ...

  6. HDU 4135 Co-prime(容斥+数论)

    Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  7. BZOJ 2005: [Noi2010]能量采集(容斥+数论)

    传送门 解题思路 首先题目要求的其实就是\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m [(gcd(i,j)-1)*2+1)]\),然后变形可得\(-n*m+2\s ...

  8. [7.18NOIP模拟测试5]砍树 题解(数论分块)

    题面(加密) 又考没学的姿势……不带这么玩的…… 考场上打了个模拟 骗到30分滚粗了 稍加思考(滑稽)可将题面转化为: 求一个最大的$d$,使得 $\sum \limits _{i=1}^n {(\l ...

  9. noi.acNOIP模拟赛5-count

    题目链接 戳我 题意简述 你有一个n+1个数的序列,都是1~n,其中只有一个有重复,求每个长度的本质不同的子序列个数.\(mod 1e9+7\). sol 说起来也很简单,设相同的数出现的位置为\(l ...

随机推荐

  1. 支持向量机SVM(一):基本概念、目标函数的推导

    本文旨在介绍支持向量机(SVM)的基本概念并解释SVM中的一个关键问题: 为什么SVM目标函数中的函数间隔取1? 一.分类问题 给定N个分属两类的样本,给出一个决策边界使得边界一侧只含一种样本(如下图 ...

  2. HtmlParse:一款超轻量级的HTML文件解析和爬取工具

    HtmlParse 是一款基于windwos平台的HTML文档解析工具,可快速构建DOM树,从而轻松实现网页元素的爬取工作.DOM树就是一个HTML文档的节点树,每个节点由:标签(Tag).属性(At ...

  3. 【Java面试】Mysql为什么使用B+Tree作为索引结构

    一个工作8年的粉丝私信了我一个问题. 他说这个问题是去阿里面试的时候被问到的,自己查了很多资料也没搞明白,希望我帮他解答. 问题是: "Mysql为什么使用B+Tree作为索引结构" ...

  4. ShardingSphere-proxy-5.0.0分布式雪花ID生成(三)

    一.目的 保证在分库分表中每条数据具有唯一性 二.修改配置文件config-sharding.yaml,并重启服务 # # Licensed to the Apache Software Founda ...

  5. 十分钟快速实战Three.js

    前言 本文不会对Three.js几何体.材质.相机.模型.光源等概念详细讲解,会首先分成几个模块给大家快速演示一盒小案例.大家可以根据这几个模块快速了解Three.js的无限魅力.学习 我们会使用Th ...

  6. sql-sql优化

    SQL执行流程 a. 编写过程: select dinstinct .. from .. join .. on .. where .. group by .. having .. order by . ...

  7. 一次 Keepalived 高可用的事故,让我重学了一遍它!

    原文首发: 你好,我是悟空. 前言 上次我们遇到了一个 MySQL 故障的事故,这次我又遇到了另外一个奇葩的问题: Keepalived 高可用组件的虚拟 IP 持续漂移,导致 MySQL 主从不断切 ...

  8. C++ 练气期之指针所指何处

    1. 指针 指针是一种C++数据类型,用来描述内存地址. 什么是内存地址? 内存中的每一个存储单元格都有自己的地址,地址是使用二进制进行编码.地址从形态上看是一个整型数据类型.但是,它的数据含义并不表 ...

  9. Cascade-LSTM: A Tree-Structured Neural Classifier for Detecting Misinformation Cascades(KDD20)

    Cascade-LSTM是一个用于虚假信息级联检测的树结构神经分类器,它本质上是一个谣言(假新闻)检测模型,它将谣言检测任务视为一个树分类问题. Cascade-LSTM在递归神经网络(本文具体基于T ...

  10. 临近梯度下降算法(Proximal Gradient Method)的推导以及优势

    邻近梯度下降法 对于无约束凸优化问题,当目标函数可微时,可以采用梯度下降法求解:当目标函数不可微时,可以采用次梯度下降法求解:当目标函数中同时包含可微项与不可微项时,常采用邻近梯度下降法求解.上述三种 ...