数论风骚套路汇总(不定期更新)

2024-02-04 11:48

本文主要是介绍数论风骚套路汇总(不定期更新),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

          • 10.30日更新(多项莫比乌斯反演)
          • 10.31日更新

数论这个东西,确实值得深刻的研究。这里专门开一篇博客,记录遇见的一些奇技淫巧,一些妖艳的操作。(不定期更新)


10.30日更新(多项莫比乌斯反演)

∑ i = 1 a 1 ∑ j = 1 a 2 … … ∑ x = 1 a x g c d ( i , j … … , x ) \sum_{i=1}^{a_1}\sum_{j=1}^{a_2}……\sum_{x=1}^{a_x}gcd(i,j……,x) i=1a1j=1a2x=1axgcd(i,j,x)其中循环的 ∑ \sum 最多有10个。

这道题看上去很不可做,但实际上跟BZOJ2005这道题的本质和推法是一样的。
m i n min min a 1 … … a x a_1……a_x a1ax中的最小值

∑ i = 1 a 1 ∑ j = 1 a 2 … … ∑ x = 1 a x g c d ( i , j … … , x ) = = ∑ i = 1 a 1 ∑ j = 1 a 2 … … ∑ x = 1 a x ∑ k = 1 m i n k ∗ [ g c d ( i , j … … , x ) = k ] \sum_{i=1}^{a_1}\sum_{j=1}^{a_2}……\sum_{x=1}^{a_x}gcd(i,j……,x)==\sum_{i=1}^{a_1}\sum_{j=1}^{a_2}……\sum_{x=1}^{a_x}\sum_{k=1}^{min}k*[gcd(i,j……,x)=k] i=1a1j=1a2x=1axgcd(i,j,x)==i=1a1j=1a2x=1axk=1mink[gcd(i,j,x)=k]

= ∑ k = 1 m i n k ∗ ∑ i = 1 a 1 k ∑ j = 1 a 2 k … … ∑ x = 1 a x k [ g c d ( i , j … … , x ) = 1 ] = = ∑ k = 1 m i n k ∗ ∑ i = 1 a 1 k ∑ j = 1 a 2 k … … ∑ x = 1 a x k ∑ x ∣ g c d ( i , j … … , x ) μ ( x ) =\sum_{k=1}^{min}k*\sum_{i=1}^{\frac{a_1}{k}}\sum_{j=1}^{\frac{a_2}{k}}……\sum_{x=1}^{\frac{a_x}{k}}[gcd(i,j……,x)=1]==\sum_{k=1}^{min}k*\sum_{i=1}^{\frac{a_1}{k}}\sum_{j=1}^{\frac{a_2}{k}}……\sum_{x=1}^{\frac{a_x}{k}}\sum_{x|gcd(i,j……,x)}\mu(x) =k=1minki=1ka1j=1ka2x=1kax[gcd(i,j,x)=1]==k=1minki=1ka1j=1ka2x=1kaxxgcd(i,j,x)μ(x)

= ∑ k = 1 m i n k ∗ ∑ x = 1 m i n k μ ( x ) [ a 1 k x ] [ a 2 k x ] … … [ a x k x ] = = ∑ k = 1 m i n k ∗ [ a 1 k ] [ a 2 k ] … … [ a x k ] φ ( k ) =\sum_{k=1}^{min}k*\sum_{x=1}^{\frac{min}{k}}\mu(x)[\frac{a_1}{kx}][\frac{a_2}{kx}]……[\frac{a_x}{kx}]==\sum_{k=1}^{min}k*[\frac{a_1}{k}][\frac{a_2}{k}]……[\frac{a_x}{k}]φ(k) =k=1minkx=1kminμ(x)[kxa1][kxa2][kxax]==k=1mink[ka1][ka2][kax]φ(k)

于是就可以开心的数论分块喽!

#include<bits/stdc++.h>
#define MAXN 1000005
#define inf 2147483647
#define ll long long
using namespace std;
const ll MD=1e9+7;
ll read(){char c;ll x;while(c=getchar(),c<'0'||c>'9');x=c-'0';while(c=getchar(),c>='0'&&c<='9') x=x*10+c-'0';return x;
}
ll T,n,i,s,top,l,r,Min,ans,a[15],vis[MAXN],pri[MAXN],phi[MAXN],sum[MAXN];
void pre(){vis[1]=1;phi[1]=1;sum[1]=1;for(ll i=2;i<=1000000;i++){if(!vis[i]) pri[++top]=i,phi[i]=i-1;for(ll j=1;j<=top&&i*pri[j]<=1000000;j++){vis[i*pri[j]]=1;if(i%pri[j]) phi[i*pri[j]]=phi[i]*phi[pri[j]]%MD;else{phi[i*pri[j]]=phi[i]*pri[j]%MD;break;}}sum[i]=sum[i-1]+phi[i];}
}
int main()
{T=read();pre();while(T--){n=read();l=1;ans=0;Min=2e9;for(ll i=1;i<=n;i++) a[i]=read(),Min=min(Min,a[i]);while(l<=Min){r=inf;s=1;for(ll i=1;i<=n;i++) {r=min(r,a[i]/(a[i]/l));s=(a[i]/l*s)%MD;}(ans+=(sum[r]-sum[l-1]+2*MD)%MD*s%MD)%MD;l=r+1;}printf("%lld\n",ans%MD);}return 0;
}

10.31日更新

f ( x ) = ∑ i = 1 ∞ ∑ j = 1 ∞ [ i ∗ j ∣ x ] f(x)=\sum_{i=1}^{\infty}\sum_{j=1}^{\infty}[i*j|x] f(x)=i=1j=1[ijx],求 ∑ i = 1 n f ( i ) \sum_{i=1}^{n}f(i) i=1nf(i)

这道题的关键点就是转化,我们将条件转化,假设 x i ∗ j = k \frac{x}{i*j}=k ijx=k,那么我们求 f ( x ) f(x) f(x)只要枚举三元组 ( i , j , k ) (i,j,k) (i,j,k)即可。

我们先假设 a ≤ b ≤ c a\leq b\leq c abc,那么我们 a a a 1 1 1 n 3 \sqrt[3]{n} 3n 枚举, b b b a a a x a \sqrt{\frac{x}{a}} ax 枚举,也就是for(ll a=1;a*a*a<=n;a++) for(ll b=a;a*b*b<=n;b++),那

c c c就可以取 [ b , n a ∗ b ] [b,\frac{n}{a*b}] [b,abn],因为这样相乘都 ≤ n \leq n n。于是用方案乘以这三元组倒换顺序的方案数即可。

核心代码,可以证明复杂度是 O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32),非常优秀。

for(ll a=1;a*a*a<=n;a++)    for(ll b=a;a*b*b<=n;b++){    ll c=n/(a*b);    if(c<b) break;   if(a==b)   ans+=(c-b)*3+1;  else   ans+=(c-b)*6+3; }

这篇关于数论风骚套路汇总(不定期更新)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677391

相关文章

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流