题目连接: http://acm.tju.edu.cn/toj/showp3990.html
解法:直接要我们求欧拉函数;
这里用了狂斌的模板。
求快速求单个欧拉函数。
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long ll;
int main(){
//freopen("F:\\123.txt","r",stdin);
ll n;
while(scanf("%lld",&n)!=EOF){
if(n==0) {
break;
}
ll ans=n; //假设所有都是质因数
for(ll i=2;i*i<=n;i++){
if(n%i==0){
ans-=ans/i; // 很巧妙的关系
// 比如n为24能,被2整除,数量就少了12,分别是 //2,4,6,8,10,12,14,16,18,20,22,24
//
while(n%i==0) // 把能整除的全删了
n/=i;
}
}
if(n>1) ans-=ans/n;
printf("%lld\n",ans);
}
return 0;
}