传送门
题目:
Sample Input
7
12
0
Sample Output
6
4
大致翻译:
给定n是一个正整数,有多少个小于n的正整数相对于n是素数?如果没有整数x>1,y>0,z>0,使得a=xy和b=xz,那么两个整数a和b是相对素数
代码:
#include<iostream>
using namespace std;
typedef long long ll;
int eular(int n){
int ans = n;
for(int i=2;i*i<=n;i++){
if(n%i==0){
ans=ans-ans/i;
//ans=ans/i*(i-1);
while(n%i==0)
n/=i;
}
}
if(n>1) ans=ans-ans/n;
return ans;
}
signed main(){
int n;
while(~scanf("%d",&n),n){
printf("%d\n",eular(n));
}
return 0;
}