您的位置:首页 > 其它

POJ 1284 Primitive Roots

2013-01-10 22:30 344 查看
大意原根的求解。

思路:如果P是素数,原根的个数为α(P-1)。

扩展阅读:http://zh.wikipedia.org/wiki/%E5%8E%9F%E6%A0%B9#.E6.80.A7.E8.B4.A8

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

typedef long long LL;

LL n;

LL euler_phi(LL n)
{
	LL m = (int)sqrt(n + 0.5);
	LL ans = n;
	for(LL i = 2; i <= m; 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;
}

/*LL euler_phi(LL n)
{
	LL m = (int)sqrt(n + 0.5);
	LL ans = n;
	for(LL i = 2; i <= m; i++) if(n % i == 0)
	{
		ans = ans - ans/i;
		while(n % i == 0) n /= i;
	}
	if(n > 1) ans = ans - ans / n;
	return ans;
}*/

void solve()
{
	LL ans = euler_phi(n-1);
	printf("%lld\n", ans);
}

int main()
{
	while(~scanf("%lld", &n))
	{
		solve();
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: