题目描述:
给你一个正整数n,请问有多少个比n小的且与n互质的正整数?
两个整数互质的意思是,这两个整数没有比1大的公约数。
输入格式:
输入包含多组测试数据。每组输入是一个正整数n(n<=1000000000)。当n=0时,输入结束。
输出格式:
对于每组输入,输出比n小的且与n互质的正整数个数。
样例输入:
7 12 0
样例输出:
6 4
时间限制: 1000ms
空间限制: 32MB
这道题就是欧拉函数的模板题,不会欧拉函数的点这里。
代码实现:
#include<bits/stdc++.h>
using namespace std;
int n;
int f(int n) {
int ans=n;
for(int i=2;i*i<=n;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(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
while(cin>>n){
if(n==0)return 0;
cout<<f(n)<<"\n";
}
return 0;
}