POJ 1284 Primitive Roots 原根

//原根+完全剩余系: //看了别人的解题报告 明白了原根的重要定理: // 设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m的欧拉函数) //假设一个数g对于P来说是原根,那么g^i mod P的结果两两不同,且有 1<g<P, 0<i<P,那么g可以称为是P的一个原根, /* 这一题主要是用到了两个定理: 1)所有的奇素数都是有原根的 2)一个数n有原根,那么他有phi(phi(n))个模n不同余的原根(n是否素数都可用) 3)一个素数有原根,则有phi(n-1)个原根 证明:假设奇素数n的原根为r,那么r,r^1,r^2...r^phi(n)是模n不同余的, 由于(r^i)^(phi(n))=(r^phi(n))^i=1(mod n),1<=i<=phi(n),所以对于r^2,r^3..r^phi(n)来说ord(sub n) a|phi(n),即phi(n)是r^i模n的阶的倍数 又因为只有当(i,phi(n))=1时,r^i才是模n的原根,所以一共有phi(phi(n))个原根。 设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m的欧拉函数) 假设一个数g对于P来说是原根,那么g^i mod P的结果两两不同,且有 1<g<P, 0<i<P,那么g可以称为是P的一个原根 归根到底就是g^(P-1) = 1 (mod P)当且当指数为P-1的时候成立.(这里P是素数). 简单来说,g^i mod p ≠ g^j mod p (p为素数) 其中i≠j且i, j介於1至(p-1)之间 则g为p的原根。 算法】定理1:如果p有原根,则它恰有φ(φ(p))个不同的原根(无论p是否为素数都适用) {x^i%p | 1 <= i <= p - 1} = {1,2,...,p-1} 等价于 {x^i%(p-1) | 1 <= i <= p - 1} = {0,1,2,...,p-2}, 即为(p-1)的完全剩余系若x,x2...x(p-1)是(p-1)的完全剩余系,根据定理,可以推出若 gcd(x, p-1) = 1时, (1,x,...,x(p-2))也是(p-1)的完全剩余系 因为若x^i != x^j (mod p-1),那么x*x^i != x*x^j (mod p-1), 与条件m矛盾,所以 x^i = x^j (mod p-1), 由此可以确定答案为Euler(p-1) */ //欧拉函数求的是 小于或等于 n 且与n互质的数的个数 //原根求的是 { (x^i mod p) | 1 <= i <= p-1 } is equal to { 1, ..., p-1 }. //就是一个数x的i次方 (1<=i<=p-1) mod p等于 a(1<=a<=p-1); 求x Euler(p-1); 以上转载http://blog.csdn.net/wahaha1_/article/details/8078753
#include <cstdio>
const int maxn = 70000;
int phi[maxn];
void phi_table(int n)
{
	for(int i = 2; i <= n; i++)
		phi[i] = 0;
	phi[1] = 1;
	for(int i = 2; i <= n; i++)
		if(!phi[i])
			for(int j = i; j <= n; j += i)
		 	{
		 		if(!phi[j])
				 	phi[j] = j; 
			 	phi[j] = phi[j] / i * (i-1);
		 	}
}

int main()
{
	phi_table(65536);
	int n;
	while(scanf("%d", &n) != EOF)
	{
		printf("%d\n", phi[n-1]);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值