题目:
题解:
只需要照着式子算即可,将每一个p取出来计算即可
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
while(n--){
int a;
scanf("%d",&a);
int res=a;
for(int i=2;i<=a/i;i++){
if(a%i==0){
res=res/i*(i-1);
//将取出来的p剩下的次方处理干净
while(a%i==0)a/=i;
}
}
//其中的p可能有一个大于根号a的奇数因子
if(a>1)res=res/a*(a-1);
printf("%d\n",res);
}
}
题后反思:
每个大于1的整数都可以表示为表示为奇数的幂的积的形式,其中最多有一个大于 的奇数因子