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 ...
随机推荐
- PTPX中的report 选项
Report的生成 report_power表示产生power report,update_power表示进行power analysis. report_power命令可以生成四种形式的report ...
- JSP-09-使用EL显示数据
目的:为了使JSP写起来更加简单. 9.1 EL表达式 ${EL表达式} : ${unsername} 操作符: “. ”操作符: 用来访问对象的属性 ${news.title} “[ ...
- 常用的网络配置命令 ifconfig 所在的包
通过rpm的数据库反查 ifconfig这个可执行文件的提供者,得出这个文件属于一个叫 net-tools 的包
- php file_get_contents与curl性能比较
1.fopen /file_get_contents 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存.但是CURL会自动对DNS信息进行缓存.对同一域名下的网页或者图片的请求只需要一次DNS ...
- React+Node.js+Express+mongoskin+MongoDB
首发:个人博客,更新&纠错&回复 采用React + Node.js + Express + mongoskin + MongoDB技术开发的一个示例,演示地址在这里,项目源码在这里. ...
- lamp环境编译错误
GD 编译出错解决方法 编译最新的2.0.35版本,用默认的 ./configure编译 当make的时候,出现以下错误 configure.ac:64: error: possibly undefi ...
- 各种数据库连接代码的测试类(java)
测试类: public class Mytest { Connection conn=null; Statement stmt=null; String myDriver="com.mysq ...
- Linux中重定向命令行
http://www.ahlinux.com/start/base/3170.html
- Volley的基本用法
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...
- ectouch第七讲 之ECshop模板机制整理
网上的资源感觉还是有些用,可以看看,帮助理解,ECshop模板机制整理原文:http://blog.sina.com.cn/s/blog_6900af430100nkn8.html 一.模板引擎: E ...