1 /*
2 算术基本定理
3 n=p1^a1*p2^a2*p3^a3*...*pn^an
4
5 约数个数:(p1+1)*(p2+1)*(p3+1)*..*(pn+1)
6 phi(n)=n*(1-1/p1)*(1-1/p2)*...*(1-1/pn)
7
8 欧拉数:1-n中与n互质的数的个数
9 phi(n)=n*(1-1/p1)*(1-1/p2)*...*(1-1/pn)
10 若p为质数,则phi(n)=p-1
11 小于n且与n互质个数的和=euler[n]*n/2
12 (a,n)=1 ==>(n-a,n)=1
13
14 n*n的点阵
15 ...
16 ...
17 ...
18 ans=2*(phi(1)+phi(2)+..+phi(n))
19
20 */
21 void euler_prime(int n) {
22 euler[1] = 1;
23 for (int i = 2; i <= n; i++) {
24 if (!v[i]) {
25 prime[t++] = i;
26 euler[i] = i - 1;
27 }
28 for (int j = 0; j < t && prime[j] * i <= n; j++) {
29 v[prime[j] * i] = 1;
30 if (i % prime[j] == 0) {
31 euler[i * prime[j]] = euler[i] * prime[j];
32 break;
33 }
34 euler[i * prime[j]] = euler[i] * euler[prime[j]];
35 }
36 }
37 }
38
39 void fenjie(n) {
40 euler(sqrt(n));
41 for (int i = 0; i < t; i++) {
42 if (n % prime[i] == 0) {
43 k++;
44 a[k] = prime[i];
45 while (n % prime[i] == 0) {
46 b[k]++;
47 n = n / prime[i];
48 }
49 if (n == 1) break;
50 }
51 }
52 if (n > 1) {
53 k++;
54 a[k] = n;
55 b[k] = 1;
56 }
57 }
58
59 int yishugeshu() {
60 int res = 1;
61 for (int i = 1; i <= k; i++) {
62 res = res * (b[i] + 1);
63 }
64 return res;
65 }