【Luogu】 P4318 完全平方数

题目链接

点击打开链接

题目解法

首先考虑二分答案,把问题变成计算 n n n 以内不是完全平方数的倍数的数的个数

考虑完全平方数的倍数和 μ \mu μ 的定义相同
所有完全平方数的倍数的 μ = 0 \mu=0 μ=0
所以 n n n 以内合法的数的个数即为 ∑ i = 1 n ∣ μ ( i ) ∣ \sum_{i=1}^{n} |\mu (i)| i=1nμ(i)
对于 μ \mu μ 的绝对值,有一种更好的形式: ∑ i = 1 n μ ( i ) 2 \sum^{n}_{i=1} \mu(i)^2 i=1nμ(i)2

对于前缀和的形式,考虑用杜教筛
现在需要构造 g g g 函数,使得 f ∗ g f*g fg g g g 的区间和都好算
这里的构造的 g g g 很独特: g ( n ) = [ n = k 2 , k ∈ N + ] g(n)=[n=k^2,k\in N^+] g(n)=[n=k2,kN+]
         ∑ i = 1 n ( f ∗ g ) ( i ) \;\;\;\;\sum_{i=1}^{n}(f*g)(i) i=1n(fg)(i)
= ∑ i = 1 n ∑ d ∣ i g ( d ) f ( i d ) =\sum_{i=1}^{n}\sum_{d|i}g(d)f(\frac{i}{d}) =i=1ndig(d)f(di)
因为只有当 f f f 中没有平方因子 且 g g g 中只有平方因子时 g ( d ) f ( i d ) g(d)f(\frac{i}{d}) g(d)f(di) 才为 1
所以只有当 d d d i i i 的极大平方因子时, g ( d ) f ( i d ) = 1 g(d)f(\frac{i}{d})=1 g(d)f(di)=1
所以 ( f ∗ g ) ( n ) = 1 , ∑ i = 1 n ( f ∗ g ) ( i ) = n (f*g)(n)=1,\sum_{i=1}^{n}(f*g)(i)=n (fg)(n)=1i=1n(fg)(i)=n

继续推
         ∑ i = 1 n ( f ∗ g ) ( i ) \;\;\;\;\sum_{i=1}^{n}(f*g)(i) i=1n(fg)(i)
= ∑ i = 1 n ∑ d ∣ i g ( d ) f ( i d ) =\sum_{i=1}^{n}\sum_{d|i}g(d)f(\frac{i}{d}) =i=1ndig(d)f(di)
= ∑ i = 1 n g ( i ) S ( ⌊ n i ⌋ ) =\sum_{i=1}^{n}g(i)S(\lfloor\frac{n}{i}\rfloor) =i=1ng(i)S(⌊in⌋)
所以 g ( 1 ) S ( n ) = n − ∑ i = 2 n g ( i ) S ( ⌊ n i ⌋ ) g(1)S(n)=n-\sum_{i=2}^{n}g(i)S(\lfloor\frac{n}{i}\rfloor) g(1)S(n)=ni=2ng(i)S(⌊in⌋)
根据 g g g 只有是平方数时才为 1 1 1 的性质
S ( n ) = n − ∑ i = 2 n S ( ⌊ n i 2 ⌋ ) S(n)=n-\sum_{i=2}^{\sqrt n}S(\lfloor\frac{n}{i^2}\rfloor) S(n)=ni=2n S(⌊i2n⌋)

不用数论分块的时间复杂度仍是 O ( n 2 3 ) O(n^\frac{2}{3}) O(n32)

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int M(1000100);
int n,m=1000000,smu2[M];
unordered_map<int,int> mp;
int v[M],pr[M],cnt;
inline int read(){
	int FF=0,RR=1;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
	for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
	return FF*RR;
}
void init(){
	smu2[1]=1;
	for(int i=2;i<=m;i++){
		if(!v[i]) v[i]=i,pr[++cnt]=i,smu2[i]=-1;
		for(int j=1;j<=cnt&&pr[j]<=m/i;j++){
			v[pr[j]*i]=pr[j];
			if(pr[j]==v[i]) break;
			smu2[pr[j]*i]=-smu2[i];
		}
	}
	for(int i=2;i<=m;i++) smu2[i]=smu2[i]*smu2[i]+smu2[i-1];
}
int solve(int n){
	if(n<=m) return smu2[n];
	if(mp.count(n)) return mp[n];
	int res=n;
	for(int i=2;i*i<=n;i++) res-=solve(n/i/i);
	return mp[n]=res;
}
bool check(int mid){ return solve(mid)>=n;}
void work(){
	n=read();
	int l=n-1,r=2e9;
	while(l<r-1){
		int mid=(l+r)>>1;
		check(mid)?r=mid:l=mid;
	}
	printf("%lld\n",r);
}
signed main(){
	init();
	int T=read();
	while(T--) work(); 
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/48921.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

echarts统计图x轴文字过长,以省略号显示,鼠标经过提示全部内容

效果图如下 主要代码如下&#xff1a; //1.js代码内加入extension方法&#xff0c;chart参数是echarts实例 function extension(chart) {// 注意这里&#xff0c;是以X轴显示内容过长为例&#xff0c;如果是y轴的话&#xff0c;需要把params.componentType xAxis改为yAxis/…

国产内存惹人爱,光威的价格战太凶猛,海外品牌已无力招架

现阶段&#xff0c;真的很适合升级内存条和SSD&#xff01;当然了&#xff0c;我说的是国产的品牌&#xff0c;经过这几年的发展&#xff0c;国产内存和SSD的表现都有了质的飞跃&#xff0c;像是光威之类的品牌&#xff0c;更是成功在玩家群体中获得了良好的口碑&#xff0c;而…

使用镜像搭建nacos集群

安装并配置 docker 1 先安装docker //1.查看操作系统的发行版号 uname -r//2.安装依赖软件包 yum install -y yum-utils device-mapper-persistent-data lvm2//3.设置yum镜像源 //官方源&#xff08;慢&#xff09; yum-config-manager --add-repo http://download.docker.co…

mysql进阶1——proxysql中间件

文章目录 一、基本了解二、安装部署三、proxysql管理配置3.1 内置库3.1.1 main库表3.1.2 stats库表3.1.3 monitor库 3.2 常用管理变量3.2.1 添加管理用户3.2.2 添加普通用户3.2.3 修改监听套接字 四、多层配置系统4.1 系统结构4.2 修改变量加载配置4.3 启动加载流程 一、基本了…

Jmeter(二十三):快速生成测试报告

一、jmeter配置 首先要保证jmeter命令是ok的,如果你在cmd中输入jmeter -v,有出现如下截图所示的信息,那就说明jmeter环境ok; 二、jmeter执行结合命令 生成HTML测试报告 1.完成脚本的调试、参数化、断言等操作。然后在聚合报告中指定日志文件存储路径,路径中最好不要包含有…

利用官网文档快速上手 Android 开发

官网学习链接&#xff1a;官网链接 官网教程

electron-egg 加密报错

electron框架&#xff1a;electron-egg 解决方式 npm uninstall bytenode npm install bytenode1.3.6node:internal/modules/cjs/loader:928 throw err; ^ Error: Cannot find module ‘node:assert/strict’ Require stack: D:\electron-egg-test\new-electron-egg\electr…

SpringBoot与文档excel,pdf集成案例分享

一、文档类型介绍 1、Excel文档 Excel一款电子表格软件。直观的界面、出色的计算功能和图表工具&#xff0c;在系统开发中&#xff0c;经常用来把数据转存到Excel文件&#xff0c;或者Excel数据导入系统中&#xff0c;这就涉及数据转换问题。 2、PDF文档 PDF是可移植文档格…

干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充

前言 不从恶人的计谋&#xff0c;不站罪人的道路&#xff0c;不坐亵慢人的座位&#xff0c;惟喜爱耶和华的律法&#xff0c;昼夜思想&#xff0c;这人便为有福&#xff01;他要像一棵树栽在溪水旁&#xff0c;按时候结果子&#xff0c;叶子也不枯干。凡他所做的尽都顺利。 如…

Higress非K8S安装

Higress非K8S安装 文章目录 Higress非K8S安装环境安装安装higress进入到higress 的目录下修改下nacos的地址启动Higress登录higress管理页面 Higress 是基于阿里内部构建的下一代云原生网关&#xff0c;官网介绍&#xff1a;https://higress.io/zh-cn/docs/overview/what-is-hi…

HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face

总述 HuggingGPT 让LLM发挥向路由器一样的作用&#xff0c;让LLM来选择调用那个专业的模型来执行任务。HuggingGPT搭建LLM和专业AI模型的桥梁。Language is a generic interface for LLMs to connect AI models 四个阶段 Task Planning&#xff1a; 将复杂的任务分解。但是这里…

外文期刊影响因子去哪里查询,如何查询

期刊影响因子(Impact factor&#xff0c;IF)&#xff0c;是代表期刊影响大小的一项定量指标。也就是某刊平均每篇论文的被引用数&#xff0c;它实际上是某刊在某年被全部源刊物引证该刊前两年发表论文的次数&#xff0c;与该刊前两年所发表的全部源论文数之比。那么&#xff0c…

《嵌入式 - 工具》J-link读写MCU内部Flash

1 J-Link简介 J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWAR&#xff0c;ADS&#xff0c;KEIL&#xff0c;WINARM&#xff0c;RealView等集成开发环境支持所有ARM7/ARM9/ARM11,Cortex M0/M1/M3/M4, Cortex A5/A8/A9等内核芯片的仿真&#xff0c;是学…

redis 第二章

目录 1.持久化 2.主从复制 3.总结 1.持久化 通过 aof 和 rdb 将内存里的数据放到磁盘中 aof: rdb: 2.主从复制 将一台 redis 服务器的数据&#xff0c;复制到其他的 redis 服务器 3.总结 主从复制是高可用 redis 的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可…

线性代数(基础篇):第一章:行列式 、第二章:矩阵

文章目录 线性代数0&#xff1a;串联各章等价条件 第1章 行列式1.行列式的定义(1)行列式的本质定义(2)行列式的逆序数法定义(3)行列式的展开定理 (第三种定义) 2.行列式的性质3.行列式的公式4.基本行列式(1)主对角线行列式(2)副对角线行列式(3)拉普拉斯行列式(4)范德蒙德行列式…

深度学习入门(一):神经网络基础

一、深度学习概念 1、定义 通过训练多层网络结构对位置数据进行分类或回归&#xff0c;深度学习解决特征工程问题。 2、深度学习应用 图像处理语言识别自然语言处理 在移动端不太好&#xff0c;计算量太大了&#xff0c;速度可能会慢 eg.医学应用、自动上色 3、例子 使用…

关于Ubuntu 18.04 LTS环境下运行程序出现的问题

关于Ubuntu 18.04 LTS环境下运行程序出现的问题 1.运行程序时出现以下情况 2.检查版本 strings /lib/x86_64-linux-gnu/libc.so.6 |grep GLIBC_​ 发现Ubuntu18.04下的glibc版本最高为2.27,而现程序所使用的是glibc2.34,所以没办法运行, 3.解决办法 安装glibc2.34库, …

HCIA练习4

题目如下&#xff1a; 目录 第一步&#xff1a;IP的规划 第二步&#xff1a;缺省路由 第三步&#xff1a;开启telnet 第四步&#xff1a;编写ACL表 第五步&#xff1a;测试 思路分析&#xff1a; 华为默认允许所有&#xff0c;所以我们可以先写拒绝要求&#xff0c;再写允…

TD1850多用表校准系统参考标准

参考标准 分类 标准名称 国家标准 GB/T 13978-2008 数字多用表 GB/T 15637-2012 数字多用表校准仪通用规范 计量法规 JJF 1075-2015 钳形电流表校准规范 JJF 1284-2011 交直流电表校验仪校准规范 JJF 1587-2016 数字多用表校准规范 JJG 124-2005 电流表、电压表、功率表及…

脉冲信号测试应如何选择示波器带宽?

示波器模拟带宽的定义大家都比较熟悉&#xff0c;是针对于正弦波信号定义的。从频域上看&#xff0c;正弦波信号的频谱就是单根谱线&#xff0c;只要示波器的带宽不小于信号的频率&#xff0c;那么就可以有效观测到波形。若要追求更高的幅度测试精度&#xff0c;则可以按照5倍法…
最新文章