HHUOJ 1385 互质

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;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43765333/article/details/88719744