HHUOJ 1385 互质
题目描述
给你一个正整数n,请问有多少个比n小的且与n互质的正整数?
两个整数互质的意思是,这两个整数没有比1大的公约数。
输入
输入包含多组测试数据。每组输入是一个正整数n(n<=1000000000)。当n=0时,输入结束。
输出
对于每组输入,输出比n小的且与n互质的正整数个数。
样例输入
7
12
0
样例输出
6
4
代码如下:
#include <iostream>
typedef long long ll;
using namespace std;
ll euler(ll n) {
ll ans=n;
for (ll i = 2; i <=n; i++)
{
if (n % i == 0)
{
ans = ans / i * (i - 1); //欧拉函数
}
while (n % i == 0)//筛法选素数
{
n /= i;
}
}
return ans;
}
int main() {
ll n;
while (cin >> n && n != 0)
{
cout << euler(n) << endl;
}
}