数论知识

埃氏筛打表求素数

void isprime(int n){
	cnt=0;
	memset(vis,0,sizeof vis);
	for(int i=2;i<n;i++){
		if(!vis[i]){
			prime[cnt++]=i;
			for(int j=i*i;j<n;j+=i)
			vis[j]=1;
		}
	}
}

唯一分解定理求不超过n的因子个数

LL cal(LL n){
	LL ans=1; 
	for(int i=0;i<cnt&&prime[i]*prime[i]<=n;i++){
		if(n%prime[i]==0){
			LL cnt1=0;
			while(n%prime[i]==0){cnt1++;n/=prime[i];}
			ans*=(1+cnt1);
			if(n==0)break;
		}
	}
	if(n>1)ans*=2;
	return ans;
}

打表法求欧拉phi函数

void phitable(int n){
	for(int i=2;i<=n;i++)phi[i]=0;
	phi[1]=1;
	for(int i=2;i<=n;i++)if(!phi[i])
	for(int j=i;j<=n;j+=i){
		if(!phi[j])phi[j]=j;
		phi[j]=phi[j]/i*(i-1);
	}
}

快速幂,快速乘,第50道题给了它(纪念一下)

LL ppow(LL a,LL b,LL mod){
	LL ans=1;
	while(b>0){
		if(b&1)ans=ans*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return ans;
}

LL qpow(LL a,LL b,LL mod){
	LL ans=0;
	while(b>0){
		if(b&1)ans=(ans+a)%mod;
		a=(a+a)%mod;
		b>>=1;
	}
	return ans;
}

欧拉定理求调和级数

const double C=0.57721566490153286060651209;
log(n*1.0)+C+1.0/(2.0*n)   //n>1e4

扩展欧几里得算法
在这里插入图片描述

void exgcd(LL a,LL b,LL &d,LL &x, LL &y){
	if(!b){
		d=a;x=1;y=0;
		return;
	}
	else exgcd(b,a%b,d,x,y);
	LL t=x;
	x=y;
	y=t-(a/b)*y;
}

在这里插入图片描述
欧拉 定理
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值