hdu 1787 欧拉函数模板

//欧拉函数模板
#include<iostream>
#include<cmath>
using namespace std;

int euler(int n){ //欧拉函数
int ans = n;
int s = sqrt((double)n);
for(int i=2;i<=s; i++){
if(n % i == 0){
ans = ans / i * (i - 1);
while(n % i == 0)
n /= i;
}
}
if(n > 1)
ans = ans / n * (n - 1);
return ans;
}

int main(){
int n;
while(scanf("%d", &n) !=EOF, n){
cout<<n - euler(n) - 1<<endl; //除了质数后就是和n的公约数大于等于2的数
}
return 0;
}

hdu 1787 欧拉函数模板

上一篇:最新JAVA编程题全集(50题及答案)


下一篇:Socket编程