ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【模板】数学相关(费马小定理求逆元、求最大公约数、埃氏筛法、区间筛法、快速幂)

2020-09-13 19:31:44  阅读:223  来源: 互联网

标签:埃氏 筛法 int res ll 逆元 return mod


C++版本:

费马小定理求逆元

a^(p-2)是a在模p意义下的乘法逆元(p为质数)。

求最大公约数

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

埃氏筛法

int sieve(int n) {
	int p = 0;
	for (int i = 0; i <= n; i++)is_prime[i] = true;
	is_prime[0] = is_prime[1] = false;
	for (int i = 2; i <= n; i++) {
		if (is_prime[i]) {
			prime[p++] = i;
			for (int j = 2 * i; j <= n; j += i)is_prime[j] = false;
		}
	}
	return p;
}

区间筛法

void segment_sieve(ll a, ll b) {
	for (int i = 0; (ll)i*i <= b; i++)is_prime_small[i] = true;
	for (int i = 0; i < b - a; i++)is_prime[i] = true;
	for (int i = 2; (ll)i*i < b; i++) {
		if (is_prime_small[i]) {
			for (int j = 2 * i; (ll)j*j < b; j += i)is_prime_small[j] = false;
			for (ll j = max(2LL, (a + i - 1) / i)*i; j < b; j += i)is_prime[j - a] = false;
		}
	}
}

快速幂

ll mod_pow(ll x, ll n, ll mod) {  //快速幂
	ll res = 1;
	while (n > 0) {
		if (n & 1)res = res * x%mod;
		x = x * x%mod;
		n >>= 1;
	}
	return res;
}

标签:埃氏,筛法,int,res,ll,逆元,return,mod
来源: https://www.cnblogs.com/JihuiPeng/p/13662715.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有