HDU 1787题目好水,题目意思要你求最大公约数大于1的个数..
#include<iostream>
#include<cmath>
using namespace std;
int euler(int n){ /// 把公式翻译成代码就行了..
int sum=1;
for(int i=2;i*i<=n;i++){
int a=0;
if(n%i==0){
while(n%i==0){
n /= i;
a++;
}
}
if(a){
sum = sum * (i-1) * (int)pow(i*1.0,a-1);
}
}
if(n>1) sum *= (n-1);
return sum;
}
int main (){
int n;
while(cin>>n,n){
int sum=0;
sum=euler(n);
cout<<n-sum-1<<endl;
}
}
POJ 2047 裸欧拉函数
#include<iostream>
#include<cmath>
using namespace std;
int oula(int n){
int num=1;
for(int i=2;i*i<=n;i++){
int k=0;
if(n%i==0){
while(n%i==0){
k++;
n /= i;
}
}
if(k){
num=num*(i-1)*(int)pow(i*1.0,k-1);
}
}
if(n>1) num *= (n-1);
cout<<num<<endl;
}
int main(){
int m;
while(cin>>m,m){
oula(m);
}
}