hdu4992 Primitive Roots(所有原根)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4992
题意:给出n,输出n的所有原根。
思路:求出n的一个原根x,那么对于所以的i,i<phi(n)且(i,phi(n))=1,x^i%n都是n的原根。
int Euler(int n) { int i,ans=n; for(i=2;i*i<=n;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; } int prime[N],tag[N],cnt; void init() { int i,j; for(i=2;i<N;i++) if(!tag[i]) { prime[cnt++]=i; for(j=i+i;j<N;j+=i) tag[j]=1; } tag[1]=1; } int get(int x) { if(x%2==0) return 0; int i; for(i=0;i<cnt&&prime[i]*prime[i]<=x;i++) if(x%prime[i]==0) { while(x%prime[i]==0) x/=prime[i]; if(x!=1) return 0; return prime[i]; } return x; } int n; int myPow(i64 x,i64 y) { i64 ans=1; while(y) { if(y&1) ans=ans*x%n; x=x*x%n; y>>=1; } return (int)ans; } int ee; vector<int> V; int ok(int t) { if(myPow(t,ee)!=1) return 0; int i; FOR0(i,SZ(V)) if(myPow(t,V[i])==1) return 0; return 1; } int Gcd(int x,int y) { if(y==0) return x; return Gcd(y,x%y); } int main() { init(); while(scanf("%d",&n)!=-1) { if(n==2) { puts("1"); continue; } if(n==4) { puts("3"); continue; } int t=n%2==0?get(n/2):get(n); if(!t) { puts("-1"); continue; } ee=Euler(n); V.clear(); int i; for(i=2;i*i<=ee;i++) if(ee%i==0) { V.pb(i); if(i*i!=ee) V.pb(ee/i); } for(i=2;i<n;i++) if(ok(i)) break; int Min=i; vector<int> ans; for(i=1;i<ee;i++) { if(Gcd(i,ee)!=1) continue; ans.pb(myPow(Min,i)); } sort(all(ans)); for(i=0;i<SZ(ans);i++) { if(i) putchar(' '); printf("%d",ans[i]); } puts(""); } }
hdu4992 Primitive Roots(所有原根)的更多相关文章
- 【HDU 4992】 Primitive Roots (原根)
Primitive Roots Description We say that integer x, 0 < x < n, is a primitive root modulo n i ...
- POJ 1284 Primitive Roots 数论原根。
Primitive Roots Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2479 Accepted: 1385 D ...
- poj 1284 Primitive Roots (原根)
Primitive Roots http://poj.org/problem?id=1284 Time Limit: 1000MS Memory Limit: 10000K Descr ...
- POJ_1284 Primitive Roots 【原根性质+欧拉函数运用】
一.题目 We say that integer x, 0 < x < p, is a primitive root modulo odd prime p if and only if t ...
- POJ 1284:Primitive Roots 求原根的数量
Primitive Roots Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3381 Accepted: 1980 D ...
- [POJ1284]Primitive Roots(原根性质的应用)
题目:http://poj.org/problem?id=1284 题意:就是求一个奇素数有多少个原根 分析: 使得方程a^x=1(mod m)成立的最小正整数x是φ(m),则称a是m的一个原根 然后 ...
- poj 1284 Primitive Roots(原根+欧拉函数)
http://poj.org/problem?id=1284 fr=aladdin">原根 题意:对于奇素数p,假设存在一个x(1<x<p),(x^i)%p两两不同(0&l ...
- POJ 1284 Primitive Roots 原根
题目来源:POJ 1284 Primitive Roots 题意:求奇素数的原根数 思路:一个数n是奇素数才有原根 原根数是n-1的欧拉函数 #include <cstdio> const ...
- POJ 1284:Primitive Roots(素数原根的个数)
Primitive Roots Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5709 Accepted: 3261 Descr ...
随机推荐
- STM
STM(System Trace macrocell) STM是coresight system中的一个trace source,可以提供high-bandwidth的trace data. STM优 ...
- webpack我遇到的一些坑
我的第一个用于实验webpack的项目是一个拥有多个版本的项目.什么叫多个版本?这个项目对3个语言版本+3个不同城市版本+(移动端 + PC端),也就是3*3*2,18个版本. 我的第一次想法肯定是 ...
- c语言对文件操作完成后尽量手动关闭
是这样的,我写了一个函数,传给函数文件名,在函数中对文件写入一些内容.在这个函数的后面没有手动使用 fclose. 当在程序中对这个函数调用两次之后,最终把要写入的文件写错了. 在第二次使用 fope ...
- windows下gvim与gcc的一键环境的搭建
此处略去在windows中配置gcc的方法.默认你已经能够在命令提示符下直接使用gcc了. 其实就是写了一个vimscript的.vim文件,然后在 _vimrc 中使用source命令引用进来. 以 ...
- 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数
目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...
- python False
None 空字符串 空列表 空元组 空字典 false为False
- apache部署django记录
在ubuntu下通过apache部署django 首先需要下载python,django,apache以及wsgi模块 python基本已经自带,我用的是2.7,不是的话可以重新装一个 下载djang ...
- ch2-4:遇到嵌套列表进行缩进打印
1.增加一个参数来控制缩进打印:level '''这是一个模块,可以打印列表,其中可能包含嵌套列表''' def print_list(the_list,level): ""&qu ...
- 理解Linux中断 (2)【转】
转自:http://blog.csdn.net/tommy_wxie/article/details/7425692 版权声明:本文为博主原创文章,未经博主允许不得转载. .内核的中断处理 3.1.中 ...
- [转]Jexus的常用操作和基本配置
转自http://www.cnblogs.com/xiaodiejinghong/archive/2013/04/05/3000404.html 3.Jexus的操作 经过两个章节关于Jexus的介绍 ...