#include <bits/stdc++.h>
using namespace std;
void computeTotient(int n, vector<int>& phi) {
// Initialize phi array
for (int i = 1; i <= n; i++) {
phi[i] = i;
}
// Compute totient values using the modified Sieve of Eratosthenes
for (int i = 2; i <= n; i++) {
if (phi[i] == i) { // Check if i is prime
for (int j = i; j <= n; j += i) {
phi[j] = phi[j] / i * (i - 1);
}
}
}
}
int main() {
int n;
cout << "Enter the value of n: ";
cin >> n;
vector<int> phi(n + 1);
computeTotient(n, phi);
// Display the totient values
cout << "Euler's Totient Function values up to " << n << " are:\n";
for (int i = 1; i <= n; i++) {
cout << "phi(" << i << ") = " << phi[i] << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBjb21wdXRlVG90aWVudChpbnQgbiwgdmVjdG9yPGludD4mIHBoaSkgewogICAgLy8gSW5pdGlhbGl6ZSBwaGkgYXJyYXkKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIHBoaVtpXSA9IGk7CiAgICB9CiAgICAKICAgIC8vIENvbXB1dGUgdG90aWVudCB2YWx1ZXMgdXNpbmcgdGhlIG1vZGlmaWVkIFNpZXZlIG9mIEVyYXRvc3RoZW5lcwogICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgaWYgKHBoaVtpXSA9PSBpKSB7IC8vIENoZWNrIGlmIGkgaXMgcHJpbWUKICAgICAgICAgICAgZm9yIChpbnQgaiA9IGk7IGogPD0gbjsgaiArPSBpKSB7CiAgICAgICAgICAgICAgICBwaGlbal0gPSBwaGlbal0gLyBpICogKGkgLSAxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbjsKICAgIGNvdXQgPDwgIkVudGVyIHRoZSB2YWx1ZSBvZiBuOiAiOwogICAgY2luID4+IG47CgogICAgdmVjdG9yPGludD4gcGhpKG4gKyAxKTsKICAgIGNvbXB1dGVUb3RpZW50KG4sIHBoaSk7CgogICAgLy8gRGlzcGxheSB0aGUgdG90aWVudCB2YWx1ZXMKICAgIGNvdXQgPDwgIkV1bGVyJ3MgVG90aWVudCBGdW5jdGlvbiB2YWx1ZXMgdXAgdG8gIiA8PCBuIDw8ICIgYXJlOlxuIjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGNvdXQgPDwgInBoaSgiIDw8IGkgPDwgIikgPSAiIDw8IHBoaVtpXSA8PCAiXG4iOwogICAgfQoKICAgIHJldHVybiAwOwp9