poj1284 Primitive Roots:欧拉函数+原根
来源:互联网 发布:手机淘宝怎么切换客服 编辑:程序博客网 时间:2024/05/18 02:11
题目链接:poj1284
题意:
给出一个p(3<=p<65536),求这个数有多少个原根
思路:
何为原根?
由费马小定理可知 如果a于p互质 则有a^(p-1)≡1(mod p)
对于任意的a是不是一定要到p-1次幂才会出现上述情况呢?
显然不是,当第一次出现a^k≡1(mod p)时, 记为ep(a)=k 当k=(p-1)时,称a是p的原根
每个素数恰好有f(p-1)个原根(f(x)为欧拉函数)
定理:对于奇素数m, 原根个数为phi(phi(m)), 由于phi(m)=m-1, 所以为phi(m-1)。
某大牛的证明:
{xi%p | 1 <= i <= p - 1} = {1,2,...,p-1} 等价于 {xi%(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)的完全剩余系
因为若xi != xj (mod p-1),那么x*xi != x*xj (mod p-1),与条件m矛盾,所以 xi = xj (mod p-1),
由此可以确定答案为EulerPhi(p-1)
代码
#include <cstdio>#include <cstring>#include <algorithm>#include<iostream>#include<map>using namespace std;#define maxn 100005#define mod 9901int prime[maxn],phi[maxn];bool unprime[maxn];void Euler(){ int i,j,k = 0; for(i = 2; i <maxn; i++) { if(!unprime[i]) { prime[k++] = i; phi[i] = i-1;//此处处理phi(p) } for(j = 0; j < k && prime[j]*i <maxn; j++) { unprime[prime[j] *i] = true; if(i % prime[j] != 0) { //此处处理phi(i*p)=phi(i)*phi(p) ,p不是i的约数 //phi[prime[j]]==prime[j]-1 phi[prime[j]*i] = phi[i]*(prime[j]-1); } else { //此处处理phi(i*p),p是i的约数 phi[prime[j]*i] = phi[i]*prime[j]; break; } } }}int main(){ int n; Euler(); while(~scanf("%d",&n)){printf("%d\n",phi[phi[n]]);} return 0;}
阅读全文
0 0
- Primitive Roots(Poj1284)(欧拉函数+原根)
- poj1284 Primitive Roots(原根,欧拉函数)
- poj1284 Primitive Roots:欧拉函数+原根
- POJ1284 Primitive Roots (欧拉函数 & 原根)
- POJ1284:Primitive Roots(欧拉函数的应用,奇素数的原根)
- poj1284 Primitive Roots (欧拉函数)
- poj1284 Primitive Roots 【原根】
- POJ1284 Primitive Roots【原根】
- Primitive Roots +欧拉函数+原根
- POJ1284---Primitive Roots(求原根个数, 欧拉函数)
- poj1284——Primitive Roots(欧拉函数)
- poj1284 Primitive Roots 原根个数
- POJ1284 Primitive Roots(原根定理)
- POJ 1284 Primitive Roots (原根,欧拉函数)
- POJ 1284 Primitive Roots 原根(欧拉函数)
- POJ 1284 Primitive Roots (欧拉函数&原根定理)
- poj 1284 Primitive Roots(欧拉函数,原根定理)
- poj 1284 Primitive Roots(原根+欧拉函数)
- 修改MySQL提示符
- 重装系统之后电脑无法识别磁盘怎么办
- JavaAgent无法替换运行中的字节码
- 最新期货交易时间一览表(日盘+夜盘)2017年3月更新
- pvanet训练自己的数据过程记录
- poj1284 Primitive Roots:欧拉函数+原根
- MySQL语句的规范
- Java-内部类(二)为什么匿名内部类和局部内部类只能访问final变量
- Java菜鸟学习日记22
- 17个css知识点整理【上】
- SSL/TLS 双向认证(一) -- SSL/TLS工作原理
- [hdu6070] 2017hdu多校第四场
- bzoj2439[中山市选2011] 序列 DP
- windows2008系统 IIS7 下设置伪静态的方法