// generate prime and phi numbers in range [1, size), O(size) const int size = 10000000; // 1e7 bool isp[size]; int prime[size], lp, phi[size]; void make_prime_and_phi() { int i, j; memset(isp, true, sizeof(isp)); isp[0] = isp[1] = false; lp = 0; phi[1] = 1; for (i = 2; i < size; ++i) { if (isp[i]) { prime[lp++] = i; phi[i] = i - 1; } for (j = 0; j < lp && prime[j] * i < size; ++j) 20 { 21 isp[prime[j] * i] = false; 22 if (i % prime[j] == 0) { 23 phi[i * prime[j]] = prime[j] * phi[i]; 24 break; 25 } else { 26 phi[i * prime[j]] = (prime[j] - 1) * phi[i]; 27 } 28 } 29 } 30 } 可以高效的在大On的时间内得出结果