//https://vjudge.net/contest/298537#overview
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;

//A
// #define N 10000000
// int che[N];
// int pri[N];
// int cnt = 0, n;
// void prim()
// {
//     for (int i = 0; i < N; i++)
//     {
//         che[i] = 1;
//     }
//     for (int i = 2; i < N; i++)
//     {
//         if (che[i])
//         {
//             pri[cnt++] = i;
//         }
//         for (int j = 0; j < cnt && pri[j] * i < N; j++)
//         {
//             che[pri[j] * i] = 0;
//             if (i % pri[j] == 0)
//             {
//                 break;
//             }
//         }
//     }
//  //   for(int i=0;i<100;i++) cout<<pri[i]<<endl;
// }
// int coo[N];
// int main()
// {
//     cin >> n;
//     bool f=1;
//     int tt=int(sqrt(n));
//     for(int i=2;i<=tt;i++){
//         if(n<=2||n%i==0){
//             f=0;
//             break;
//         }
//     }
//     if(f){
//         cout<<n<<": "<<n<<endl;
//         return 0;
//     }
//     int t = n;
//     prim();
//     memset(coo, 0, sizeof coo);
//     int pos = 0;
//     while (n != 1)
//     {
//         int i;
//         if (n<N&&che[n])
//         {
//             coo[pos++] = n;
//             break;
//         }
//         for (i = 0; i < cnt; i++)
//         {
//             if (n % pri[i] == 0)
//             {
//                 coo[pos++] = pri[i];
//                 break;
//             }
//         }
//         n /= pri[i];
//     }
//     cout << t << ':';
//     for (int i = 0; i < pos; i++)
//     {
//         cout << ' ' << coo[i];
//     }
//     cout << '\n';
//     return 0;
// }

//B
// long long int poww(long long int a, long long int b)//快速幂
// {
//     long long  ans = 1;
//    long long base = a;
//     while (b != 0)
//     {
//         if (b & 1)
//         {
//             ans *= base;
//             ans %= 1000000007;
//         }
//         base *= base;
//         base %= 1000000007;
//         b >>= 1;
//     }
//     return ans;
// }
// int main()
// {
//     long long  a, ab;
//     cin >> a >> ab;
//     a = poww(a, ab);
//     cout << a%1000000007 << endl;
//     return 0;
// }

//C
// long long gcd(long long int a,long long int b){
//     long long t;
//     if(a<b) {
//         t=b;
//         b=a;
//         a=t;
//     }
//     while(a-b){
//         t=b;
//         b=a-b;
//         a=t;
//         if(a<b){
//             t=b;
//             b=a;
//             a=t;
//         }
//     }
//     return a;
// }
// long long int a[10000];
// long long int n;
// int main(){
//     cin>>n;
//     for(int i=0;i<n;i++){
//         cin>>a[i];
//         if(i!=0){
//             a[i]=a[i-1]/gcd(a[i-1],a[i])*a[i];
//         }
//     }
//     cout<<a[n-1]<<endl;
//     return 0;
// }

//D
//在数论中，一个给定的n的totative是一个符合大于0并且小于等于n的k,并且这个k和n是互质数（什么是互质数呢）。
//互质数为数学中的一种概念，即两个或多个整数的公因数只有1的非零自然数。公因数只有1的两个非零自然数，叫做互质数。
//费马小定理：假设p为质数，a为任意正整数，那么a^p-a可以被p整除
//https://zh.wikipedia.org/wiki/%E6%AC%A7%E6%8B%89%E5%87%BD%E6%95%B0

#define N 1000000

int pri[N] ,cnt = 0;
bool che[N];

void prime()
{
    for (int i = 0; i < N; i++)
        che[i] = 1;
    for (int i = 2; i < N; i++)
    {
        if (che[i])
        {
            pri[cnt++] = i;
        }
        for (int j = 0; j < cnt && i * pri[j] < N; j++)
        {
            che[pri[j] * i] = 0;
            if (j % pri[j] == 0)
                break;
        }
    }
} //线筛

int phi(int n)
{
    int rea = n;
    for (int i = 0; pri[i] * pri[i] <= n; i++)
    {
        if (n % pri[i] == 0)
        {
            rea = rea - rea / pri[i];

            while (n % pri[i] == 0)
            {
                n /= pri[i];
            }
        }
    }
    if (n > 1)
        rea = rea - rea / n;
    return rea;
}

// int euler[N];

// void getEuler()

// {

//     memset(euler, 0, sizeof(euler));

//     euler[1] = 1;

//     for (int i = 2; i <= N; i++)

//         if (!euler[i])

//             for (int j = i; j <= N; j += i)

//             {

//                 if (!euler[j])
//                         euler[j] = j;

//                 euler[j] = euler[j] / i * (i - 1);
//             }
// }

int main(){
    int an;
    cin>>an;
    prime();
    cout<<phi(an)<<endl;
    return 0;
}



Measured memory_bytes: 6008