标签:eula notprime int MAX 入門 搬運 NUMBER primes 數論
#define maxp 65536
#define ll long long
int primes[maxp];
bool notprime[maxp]; // 1
void Eratosthenes() {
notprime[1] = true;
primes[0] = 0;
for (int i = 2; i < maxp; i++) {
if (!notprime[i]) {
primes[++primes[0]] = i; // 2
for (ll j = (ll)i*i; j < maxp; j += i) {
notprime[j] = true; // 3
}
}
}
}
struct factor {
int prime, count;
factor() {}
factor(int p, int c) : prime(p), count(c) {}
};
void Factorization(int n, vector <factor>& ans) {
ans.clear();
if (n == 1) {
return;
}
for (int i = 1; i <= primes[0]; i++) {
if (0 == n % primes[i]) {
factor f(primes[i], 0);
while (0 == n % primes[i]) {
n /= primes[i];
f.count++;
}
ans.push_back(f);
}
if (n == 1) {
return;
}
}
ans.push_back(factor(n, 1));
}
const int MAX_NUMBER = 10000010;
const int MAXP = 3163; // (int)(sqrt(MAX_NUMBER*1.0) + 1);
#define LL long long
bool notprime[MAX_NUMBER];
int primes[MAXP];
int eula[MAX_NUMBER];
void eulaFilter() {
int i, j;
notprime[1] = 1;
eula[1] = 1;
// 1.枚举每个数
for (i = 2; i < MAX_NUMBER; ++i) {
if (!notprime[i]) {
// 2.素数i的欧拉函数i-1
eula[i] = i - 1;
if (i < MAXP) {
primes[++primes[0]] = i;
}
for (j = i + i; j < MAX_NUMBER; j += i) {
notprime[j] = 1;
// 3.非素数的欧拉函数为本身*素数分量(1-1/i)的乘积
if (!eula[j]) eula[j] = j;
eula[j] = eula[j] / i*(i - 1);
}
}
}
}
标签:eula,notprime,int,MAX,入門,搬運,NUMBER,primes,數論
来源: https://www.cnblogs.com/sixiaoxiaoya/p/16339412.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。