#include <bits/stdc++.h>
int main()
{
int i,x;
scanf("%d",&x);
int ans=x;
for(int i=2;i*i<=x;i++){//对因子进行罗列
if(x%i)
continue;
ans=ans*(i-1)/i;//每次刨除一种因子 ,依次乘1/2,2/3,3/4 等等,将公因子的倍数全都除去
while(!(x%i))
{
x/=i;//不断求公因子,先是12,6,3.得到3的时候2这个公因子已经结束了,找到了下一个公因子,也就跳出了while循环。
}
}
//由此可见,如果7行i*i改成i的话,可以直接将每一种情况算尽,但是时间太长,就取根号,再加第18行进行后补
if(x>1){ans=ans*(x-1)/x;}
printf("%d",ans);
}



京公网安备 11010502036488号