题目链接

大题流程: 判定是否有原根->求出最小原根->利用最小原根找出全部原根

#include<bits/stdc++.h>
using namespace std;
typedef long long LL; const int maxn=1e6+;
int prime[maxn+];
bool check[maxn+];
int phi[maxn+];
int num_prime;
void init()
{
memset(check, false, sizeof(check));
phi[]=;
for(int i=; i<=maxn; i++)
{
if(!check[i])
{
prime[num_prime++]=i;
phi[i]=i-;
}
for(int j=; j<num_prime; j++)
{
if(i*prime[j]>maxn) break;
check[i*prime[j]]=true;
if(i%prime[j]==)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else
{
phi[i*prime[j]]=phi[i]*(prime[j]-);
}
}
}
} LL gcd(LL a, LL b)
{
return b? gcd(b,a%b):a;
} void get(LL n,vector<LL>& fac) //对n进行因式分解
{
fac.clear();
for(LL i=; i*i<=n; i++)
if(n%i==)
{
fac.push_back(i);
while(n%i==) n/=i;
}
if(n>) fac.push_back(n);
} LL qpow(LL x,LL n,LL mod) //求x^n%mod
{
LL ret=;
for(; n; n>>=)
{
if(n&) ret=ret*x%mod;
x=x*x%mod;
}
return ret;
} vector<LL> fac;
vector<LL> ans; bool ok(LL x)
{
if(x%==) x/=;
if(x%==) return false;
for(int i=; prime[i]*prime[i]<=x; i++) if(x%prime[i]==)
{
while(x%prime[i]==) x/=prime[i];
return x==;
}
return true;
} LL get_g(LL p) //得到一个正整数p的最小原根
{
for(int i=; i<p; i++)
{
bool flag=false;
for(LL x:fac)
if(qpow(i,phi[p]/x,p)==)
{
flag=true;
break;
}
if(!flag&&qpow(i,phi[p],p)==) return i;
}
} void GetAns(LL g,LL p,vector<LL>& ans) //由最小原根p,得到某正整数p的全部原根
{
ans.clear();
ans.push_back(g);
for(int i=; i<phi[p]; i++)
if(gcd(i,phi[p])==) ans.push_back(qpow(g,i,p));
} int main()
{
init();
LL p;
while(~scanf("%lld",&p))
{
if(p==||p==)
{
printf("%lld\n",p-);
continue;
}
if(!ok(p)) //首先判断是否有原根
{
puts("-1");
continue;
}
get(phi[p],fac);
LL g=get_g(p); //定义g为最小原根
GetAns(g,p,ans);
sort(ans.begin(),ans.end());
for(int i=; i<ans.size(); i++)
printf("%lld%c",ans[i],i==ans.size()-? '\n':' ');
}
}

hdu 4992 Primitive Roots 【求原根模板】的更多相关文章

  1. POJ 1284:Primitive Roots 求原根的数量

    Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3381   Accepted: 1980 D ...

  2. HDU - 4992 Primitive Roots (原根)

    模板题,可用于求一个数的所有原根. #include<bits/stdc++.h> using namespace std; typedef long long ll; ,inf=0x3f ...

  3. 【HDU 4992】 Primitive Roots (原根)

    Primitive Roots   Description We say that integer x, 0 < x < n, is a primitive root modulo n i ...

  4. poj 1284 Primitive Roots (原根)

    Primitive Roots http://poj.org/problem?id=1284 Time Limit: 1000MS   Memory Limit: 10000K       Descr ...

  5. POJ 1284 Primitive Roots 数论原根。

    Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2479   Accepted: 1385 D ...

  6. 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 ...

  7. poj 1284 Primitive Roots(原根+欧拉函数)

    http://poj.org/problem?id=1284 fr=aladdin">原根 题意:对于奇素数p,假设存在一个x(1<x<p),(x^i)%p两两不同(0&l ...

  8. [POJ1284]Primitive Roots(原根性质的应用)

    题目:http://poj.org/problem?id=1284 题意:就是求一个奇素数有多少个原根 分析: 使得方程a^x=1(mod m)成立的最小正整数x是φ(m),则称a是m的一个原根 然后 ...

  9. POJ 1284 Primitive Roots (求原根个数)

    Primitive Roots 题目链接:id=1284">http://poj.org/problem?id=1284 利用定理:素数 P 的原根的个数为euler(p - 1) t ...

随机推荐

  1. ASM磁盘组删除磁盘

    ASM磁盘组删除磁盘 [oracle@dbserver1 ~]$ su - gridsqlplus / as sysasmConnected.SQL> alter diskgroup data ...

  2. Vue实现音乐播放器(四):页面入口+header组件的编写

    首先下载三个包 babel-runtime对es语法进行转义 fastclick解决移动端点击300毫秒延迟的问题 babel-polyfill对es6 api进行转义 下载了包之后要在main.js ...

  3. 关于一段有趣代码引出的String创建对象的解释

    通常来说,我们认为hashCode不相同就为不同的对象.就这样由一段代码引发了一场讨论,代码如下: @Test public void stringCompare() { String s1 = &q ...

  4. kali安装教程

    首先在vm里面新建虚拟机,直接选择典型,然后下一步.   1   2 然后到了这一步,选择中间的安装程序光盘镜像文件,然后去文件里面找你自己下载的镜像,这时候可能系统会出现无法检测此光盘镜像中的操作系 ...

  5. 链表两数相加(add two numbers)

    问题 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它 ...

  6. 毕业之后de经历

    毕业之后 2016年7月,我大学毕业了.7月3号到7月6号,我陆续用我的小行李箱,在半夜12点左右,把我的生活用品拉出宿舍,大汗淋漓之后,我就在晚上12点多,找个奶茶店买一杯芒果冰沙.白天要去厦门的一 ...

  7. Maven构建Struts2框架的注意事项

    [本人出错点:404,就是在web.xml配置文件中少配置了struts.xml的路径] 1.创建Maven,搭建Struts框架,实现最基本的Hello World 在pom.xml中加入strut ...

  8. C# 数据类型之间的转换

    C数据类型转换 https://www.cnblogs.com/bluestorm/p/3168719.html 1 字符串解析为整数: a = int.Parse (Console.ReadLine ...

  9. 厉害了,Apache架构师们遵循的 30 条设计原则

    作者:Srinath 翻译:贺卓凡,来源:公众号ImportSource Srinath通过不懈的努力最终总结出了30条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或 ...

  10. [2019杭电多校第五场][hdu6624]fraction

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6624 题意为求最小的b满足$a*b^{-1}\equiv x(modp)$. 把式子化简一下: $a\ ...