写模板-质数的简单应用

1 范围内,每个数的质数及其出现次数

2 单个数的因子

3 单个数的因子数量

vector<vector<pair<int, int>>> prime_range;
void sieveRangePrimes(int x = 1e7){
	prime_range.resize(x + 1);
	for (int i = 2; i <= x; ++i){
		if (prime_range[i].empty()){
			for (int j = i; j <= x; j +=i){
				int cnt = 0;
				int t = j;
				while (j % i == 0){
					j /= i;
					cnt ++;
				}
				prime_range[j].emplace_back(i, cnt);
			}
		}
	}
}

vector<int> getDivisors(int x){
	vector<int> res;
	for (int i = 1; i <= x / i; ++i){
		if (x % i == 0){
			res.push_back(i);
			if (i != x / i){
				res.push_back(x / i);
			}
		}
	}
	return res;
}

int countDivisors(int x){
	int ans = 1;
	for (const auto& prime : prime_values){
		if (1ll * prime * prime > x){
			break;
		}
		int power = 0;
		while (x % prime == 0){
			power ++;
			x /= prime;
		}
		ans *= power + 1;
	}
	return ans * (1 + (x > 1));
}
posted @   _Yxc  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示