首页 > 其他分享 >积性函数笔记

积性函数笔记

时间:2022-09-20 22:46:31浏览次数:58  
标签:tmp 函数 积性 笔记 while long fl

积性函数:

定义

设f(n)为积性函数,n=ab且(a,b)=1,有f(n)=f(a)*f(b)

完全积性函数

n=ab,即有f(n)=f(a)*f(b),不要求(a,b)=1;

常见函数

\(\epsilon,\phi,d,\sigma,I,\mu,Id\)

迪利克雷卷积

定义

一种数论意义上的卷积,\((f*g)(n)=\sum_{d|n}f(d)*g(n/d)\)

性质

交换律,结合律,分配律。
积性函数的卷积仍为积性函数,但完全积性函数的卷积不一定是完全积性。

莫比乌斯反演

\(\epsilon=I*\mu,\phi=Id*\mu,d=I*I,\sigma=I*Id\)
前两个尤为重要。

常用技巧

找\(\sum\limits_{1<=i<=n,1<=j<=m}f((i,j))=\sum\limits_{d=1}^{min(n,m)}g(d)\lfloor {n/d}\rfloor \lfloor {m/d}\rfloor\)

几道例题


要点

\(\epsilon=I*\mu\)

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
template<typename T>
void read(T &x){
	x=0;T fl=1;char tmp=getchar();
	while(tmp<'0'||tmp>'9')fl=tmp=='-'?-fl:fl,tmp=getchar();
	while(tmp>='0'&&tmp<='9')x=(x<<1)+(x<<3)+tmp-'0',tmp=getchar();
	x*=fl;
}
const int maxn=1e7+100;
int p[maxn],pr[maxn];
int cnt;
int mu[maxn];
ll sum[maxn];
int n,m;
void solve(){
	p[1]=1,mu[1]=1;
	for(int i=2;i<maxn;i++){
		if(!p[i])mu[i]=-1,p[i]=i,pr[++cnt]=i;
		for(int j=1;j<=cnt&&pr[j]*i<maxn;j++){
			p[i*pr[j]]=pr[j];
			if(p[i]==pr[j]){
				mu[i*pr[j]]=0;
				break;
			}
			else mu[i*pr[j]]=-mu[i];
		}
	}
	for(int i=1;i<maxn;i++)
		sum[i]=sum[i-1]+mu[i];
}
signed main(){
	solve();
	int T;cin>>T;
	while(T--){
		cin>>n>>m;
		if(n>m)swap(n,m);
		ll ans=0;
		for(int l=1;l<=n;l++){
			int r=min(n/(n/l),m/(m/l));
			ans+=(sum[r]-sum[l-1])*(n/l)*(m/l);
			l=r;
		}
		cout<<ans<<endl;
	}
	return 0;
}


要点

与上题同理,
\(Id=I*\phi\)
变量名应该是phi,偷懒没改。。。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
template<typename T>
void read(T &x){
	x=0;T fl=1;char tmp=getchar();
	while(tmp<'0'||tmp>'9')fl=tmp=='-'?-fl:fl,tmp=getchar();
	while(tmp>='0'&&tmp<='9')x=(x<<1)+(x<<3)+tmp-'0',tmp=getchar();
	x*=fl;
}
const int maxn=1e7+100;
int p[maxn],pr[maxn];
int cnt;
int mu[maxn];
ll sum[maxn];
int n,m;
void solve(){
	p[1]=1,mu[1]=1;
	for(int i=2;i<maxn;i++){
		if(!p[i])mu[i]=i-1,p[i]=i,pr[++cnt]=i;
		for(int j=1;j<=cnt&&pr[j]*i<maxn;j++){
			p[i*pr[j]]=pr[j];
			if(p[i]==pr[j]){
				mu[i*pr[j]]=mu[i]*pr[j];
				break;
			}
			else mu[i*pr[j]]=mu[i]*(pr[j]-1);
		}
	}
	for(int i=1;i<maxn;i++)
		sum[i]=sum[i-1]+mu[i];
}
signed main(){
	solve();
	int T;cin>>T;
	while(T--){
		cin>>n>>m;
		if(n>m)swap(n,m);
		ll ans=0;
		for(int l=1;l<=n;l++){
			int r=min(n/(n/l),m/(m/l));
			ans+=(sum[r]-sum[l-1])*(n/l)*(m/l);
			l=r;
		}
		cout<<ans<<endl;
	}
	return 0;
}

标签:tmp,函数,积性,笔记,while,long,fl
From: https://www.cnblogs.com/xyc1719/p/16712920.html

相关文章

  • MySQL数据库笔记
    1.操作数据库1.1创建数据库createdatabase数据库名如果想数据库没有就创建,有就不创建可以执行这句话sqlcreatedatabaseifnotexists数据库名1.2删除数据库......
  • Java学习笔记---JDK8新特性(Lambda表达式)
    1.Lambda表达式基础格式:()->{};//()为lambda表达式的参数//->为箭头操作符//{}为lambda方法体lambda表达式结果为一个实例对象,用于直接实例化......
  • 《人工智能》李开复版读书笔记
    前言:本读书笔记大多为摘录,是我认为非常有价值的部分。欲知详情,还请阅读原书。 如今,人工智能已经无处不在。手机上的常见应用,大多使用了人工智能技术,例如图像处理与机器......
  • Vin-Mono论文阅读笔记(二)
    估计器初始化简述单目紧耦合VIO是一个高度非线性的系统,需要在一开始就进行准确的初始化估计。通过将IMU预积分与纯视觉结构进行松耦合对齐,我们得到了必要的初始值。理解:......
  • java中如何将函数作为参数传递呢?
    函数简介:  函数(function)的定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、......
  • 2022-9-20 Spring学习笔记
    目录1.Spring1.1JavaBean1.2Spring的优势1.3将对象放入IOC容器配置类赋值的方法根据不同类型的赋值作用域自动装配注解1.4类型转换1.SpringSpring框架是Java应用最广......
  • 刷题笔记(leetcode02-两数相加)
    普通的循环解法,C代码:1/**2*Definitionforsingly-linkedlist.3*structListNode{4*intval;5*structListNode*next;6*};7......
  • 【Coel.学习笔记】随机化算法:模拟退火与爬山法
    简介模拟退火(\(\text{SimulateAnneal}\))和爬山法是随机化算法,二者的原理都在于通过随机生成答案并检查,把答案逐步缩小在一个可行的区间,尽可能地靠近正确答案。在考场......
  • java异常笔记
    为什么会有异常计算机不是万能的,程序猿也不是万能的,总会犯错误。比如当我们编译时报错,或者代码能跑后出现数组越界这就会出现异常;异常有几种两种,一种是编译时异常,另......
  • 2022-08-30 第二小组 张鑫 学习笔记
    实训五十二天Servlet学习内容HttpServletRequest//请求  所有和请求相关的操作  当请求来的时候,request就被实例化HttpServletResponse//响应  所有和......