Login / Get an account Logout
  • view
  • edit
  • history
  • discuss

template/zhongzihao/shai

// 线性筛模板 
// sigma 是约数个数函数 

#include<bits/stdc++.h>

const int N = 1000010;

int min[N], mu[N], phi[N], sigma[N], cnt[N];
std::vector <int> prime;

int main(){
	phi[1] = sigma[1] = mu[1] = 1;
	for (int i = 2; i < N; ++ i){
		if (!min[i]){
			min[i] = i;
			prime.push_back(i);
			sigma[i] = 2;
			phi[i] = i - 1;
			cnt[i] = 1;
			mu[i] = -1;
		}
		for (int j = 0, k, sz = (int) prime.size(); j < sz && i * prime[j] < N; ++ j){
			min[k = i * prime[j]] = prime[j];
			if (i % prime[j] == 0){
				phi[k] = phi[i] * prime[j];
				cnt[k] = cnt[i] + 1;
				sigma[k] = sigma[i] / (cnt[k]) * (cnt[k] + 1);
				mu[k] = 0;
				break;
			}
			phi[k] = phi[i] * (prime[j] - 1);
			sigma[k] = sigma[i] * 2;
			cnt[k] = 1;
			mu[k] = -mu[i];
		}
	}
	return 0;
}
京ICP备17037022号
Site
  • Front page
  • All pages
  • Categories
  • Random page
  • Recent activity
  • Upload a file
  • Help
This page
  • Raw page source
  • Printable version
  • Delete this page