题目描述
传送门
有超过
108
的数据,开LL
题解
根n求phi
运用公式:
ϕ(n)=n(1−1p1)(1−1p2)……(1−1pn)
代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define LL long long
LL T,n,ans;
inline LL phi(LL x){
LL ans=x;
for (LL i=2;i*i<=x;++i)
if (x%i==0){
ans=ans*(i-1)/i;
while (x%i==0) x/=i;
}
if (x>1) ans=ans*(x-1)/x;
return ans;
}
int main(){
while (~scanf("%lld",&n)){
if (!n) break;
ans=n-1-phi(n);
printf("%lld\n",ans);
}
}