数论模板

djx CE小王子 2024-07-27 22:47:41 2024-07-28 22:25:46 6

质数判定(欧拉筛) 时间复杂度 O(n)

const int N=1e6+10;
vector<int> prime;
bool isprime[N];
int sum[N];
void Getprime(int n){
	for(int i=2;i<=n;i++){
		if(!isprime[i]){
			prime.push_back(i);
			sum[i]=sum[i-1]+1;
		}
		else sum[i]=sum[i-1];
		for(int j=0;prime[j]<=n/i;j++){
			isprime[i*prime[j]]=1;
			if(i%prime[j]==0) break;
		}
	}
}

求解gcd 时间复杂度 O(log(n)) 递归版

int gcd(int a,int b){
	if(b==0) return a;
	return gcd(b,a%b);
}

循环版(码风一坨)

int gcd(int a,int b){
	while(b){
		int t=b;
		b=a%b;
		a=t;
	}
	return a;
}

快速幂(时间复杂度(logn))

int qpow(int n,int m,int p){
	if(m==0) return 1%p;
	if(m%2) return n*qpow(n,m-1,p)%p;
	int temp=qpow(n,m/2,p)%p;
	return temp*temp%p;
}

位运算版

int qpow(int n,int m,int p){
	int ans=1%p;
	while(m){
		if(m&1) ans=ans*n%p;
		n=n*n%p;
		m>>=1;
	}
	return ans;
}
{{ vote && vote.total.up }}

共 3 条回复

jxy2012 qwq

6

djx CE小王子

下次一定

jxy2012 qwq

是不是少了一点