LINK:原根

再复习一下原根 防止考场上要NTT求原根的时候不会求...

这道题要求求出n之内的所有原根 根据原根的定义。

原根指 若x对于模n的阶为phi(n)且\(1\leq x\leq n\) 那么称x为n的原根.

暴力做法枚举x 枚举phi(n)的因数 看其是否同余1.

复杂度nsqrt(n)左右。

考虑更快的做法 (去年省选骗分过样例也用了这个做法

考虑求出最小的原根g(暴力,但是很快. 对于剩下的原根都可以表示成g^k,条件为(k,phi(n))==1.(显然。

于是就做完了。值得一提的是我们还需要知道一个数字是否有原根。

有原根的必要充要条件:2,4,p^k,2*p^k.其中p为奇质数。

const int MAXN=1000010;
int T,top,cnt,n,maxx;
int p[MAXN],v[MAXN],phi[MAXN],vis[MAXN],s[MAXN],an[MAXN];
inline int gcd(int a,int b){return b?gcd(b,a%b):a;}
inline void prepare()
{
phi[1]=1;
for(int i=2;i<=maxx;++i)
{
if(!v[i]){p[++top]=v[i]=i;phi[i]=i-1;}
rep(1,top,j)
{
if(maxx/i<p[j])break;
int ww=i*p[j];
v[ww]=p[j];
if(v[i]==p[j]){phi[ww]=phi[i]*p[j];break;}
phi[ww]=phi[i]*(p[j]-1);
}
}
vis[2]=1;vis[4]=1;
rep(2,top,i)
{
for(ll j=1*p[i];j<=maxx;j=j*p[i])vis[j]=1;
for(ll j=2*p[i];j<=maxx;j=j*p[i])vis[j]=1;
}
}
inline int ksm(ll b,int p,int mod)
{
ll cnt=1;
while(p)
{
if(p&1)cnt=cnt*b%mod;
b=b*b%mod;p=p>>1;
}
return cnt;
}
inline void fj(int x)
{
top=0;
for(int i=1;p[i]*p[i]<=x;++i)
if(x%p[i]==0)
{
s[++top]=p[i];
while(x%p[i]==0)x/=p[i];
}
if(x>1)s[++top]=x;
}
inline int check(int x,int p)
{
if(ksm(x,phi[p],p)!=1)return 0;
rep(1,top,i)
if(ksm(x,phi[p]/s[i],p)==1)return 0;
return 1;
}
inline int getg(int p)
{
rep(1,p-1,i)if(check(i,p))return i;
return 0;
}
inline void get_ans(int g,int p)
{
cnt=0;ll ww=1;
rep(1,phi[p],i)
{
ww=ww*g%p;
if(gcd(i,phi[p])==1)an[++cnt]=ww;
}
}
int main()
{
freopen("1.in","r",stdin);
get(T);maxx=1000000;prepare();
while(T--)
{
get(n);int d;get(d);
if(vis[n])
{
fj(phi[n]);
get_ans(getg(n),n);
sort(an+1,an+1+cnt);
put(cnt);
rep(1,cnt/d,i)printf("%d ",an[i*d]);
}
else puts("0");
puts("");
}
return 0;
}

luogu P6091 原根的更多相关文章

  1. luogu P5605 小 A 与两位神仙 - 原根

    题目传送门 传送门 Subtask 1 直接模拟. Subtask 2 BSGS算法模板. Subtask 3 考虑模 $m$ 的任意一个原根 $g$. 假设 $g^{ra} \equiv x \pm ...

  2. P6091-[模板]原根

    正题 题目链接:https://www.luogu.com.cn/problem/P6091 题目大意 给出一个数\(p\),求出它的所有在\([0,p]\)的原根. 解题思路 原根的定义,\(\de ...

  3. 数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho

    数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p ...

  4. 51nod1135(求最小原根)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1135 题意:中文题诶- 思路:设m是正整数,a是整数,若a模 ...

  5. Luogu 魔法学院杯-第二弹(萌新的第一法blog)

    虽然有点久远  还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题  沉迷游戏,伤感情 #include <queue> ...

  6. luogu p1268 树的重量——构造,真正考验编程能力

    题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...

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

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

  8. 51nod 1135 原根

    题目链接:51nod 1135 原根 设 m 是正整数,a是整数,若a模m的阶等于φ(m),则称 a 为 模m的一个原根.(其中φ(m)表示m的欧拉函数) 阶:gcd(a,m)=1,使得成立的最小的 ...

  9. hdu4992 Primitive Roots(所有原根)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4992 题意:给出n,输出n的所有原根. 思路:求出n的一个原根x,那么对于所以的i,i<phi( ...

随机推荐

  1. BZOJ2200 道路与航线 题解

    题目 Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 \((1 <= T <= 25,000)\),编号为\(1T\).这些城镇之间通过\(R ...

  2. 钉钉内置的浏览器怎么改变title

    在我项目的开发过程当中,遇到过在钉钉打开的vue写的h5页面,通过在路由切换的时候通过全局的路由钩子函数改变 document.title 的内容失效的问题. const routes = [ { p ...

  3. day53 html收尾

    目录 一.解决浮动带来的影响 二.溢出属性 三.定位 四.验证浮动和定位是否脱离文档流 五.z-index模态框 六.透明度opacity 七.js简介 一.解决浮动带来的影响 块级标签内的浮动如果该 ...

  4. 函数默认参数的TDZ

    我们知道块级作用域会有TDZ. 其实方法参数也存在TDZ function add(first = second, second) { return first + second; } console ...

  5. python 将指定文件夹中的指定文件放入指定文件夹中

    import os import shutil import re #获取指定文件中文件名 def get_filename(filetype): name =[] final_name_list = ...

  6. flask 源码专题(七):threading.local和高级

    1.python之threading.local 当每个线程在执行 val.num=1 ,在内部会为此线程开辟一个空间,来存储 num=1 val.num,找到此线程自己的内存地址去取自己存储 num ...

  7. java 面向对象(二十九):异常(二)异常的处理

    1.java异常处理的抓抛模型过程一:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象. * 并将此对象抛出. * 一旦抛出对象以后,其后的代 ...

  8. Drf06 /drf总结

    Drf06 /drf总结 目录 Drf06 /drf总结 1. restful规范 2. drf组件认证的实现过程? 3. drf组件中权限的实现过程? 4. drf组件中节流的实现方式? 5. 什么 ...

  9. 深度理解SpringIOC,面试你根本不需要慌!

    文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star! 搜索关注微信公众号 码出Offer 领取各种学习资料! 深度理解Spring IOC(控制反转) 一.IOC概述 I ...

  10. Ethical Hacking - NETWORK PENETRATION TESTING(1)

    Pre--Connection-Attacks that can be done before connecting to the network. Gaining Access - How to b ...