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 }