luogu P6091 原根
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 原根的更多相关文章
- luogu P5605 小 A 与两位神仙 - 原根
题目传送门 传送门 Subtask 1 直接模拟. Subtask 2 BSGS算法模板. Subtask 3 考虑模 $m$ 的任意一个原根 $g$. 假设 $g^{ra} \equiv x \pm ...
- P6091-[模板]原根
正题 题目链接:https://www.luogu.com.cn/problem/P6091 题目大意 给出一个数\(p\),求出它的所有在\([0,p]\)的原根. 解题思路 原根的定义,\(\de ...
- 数论入门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 ...
- 51nod1135(求最小原根)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1135 题意:中文题诶- 思路:设m是正整数,a是整数,若a模 ...
- Luogu 魔法学院杯-第二弹(萌新的第一法blog)
虽然有点久远 还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题 沉迷游戏,伤感情 #include <queue> ...
- luogu p1268 树的重量——构造,真正考验编程能力
题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...
- [POJ1284]Primitive Roots(原根性质的应用)
题目:http://poj.org/problem?id=1284 题意:就是求一个奇素数有多少个原根 分析: 使得方程a^x=1(mod m)成立的最小正整数x是φ(m),则称a是m的一个原根 然后 ...
- 51nod 1135 原根
题目链接:51nod 1135 原根 设 m 是正整数,a是整数,若a模m的阶等于φ(m),则称 a 为 模m的一个原根.(其中φ(m)表示m的欧拉函数) 阶:gcd(a,m)=1,使得成立的最小的 ...
- hdu4992 Primitive Roots(所有原根)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4992 题意:给出n,输出n的所有原根. 思路:求出n的一个原根x,那么对于所以的i,i<phi( ...
随机推荐
- html通过css,js实现div悬浮效果总汇,如原生JS实现滚动到一定位置实现div悬浮
在我们的实际开发中,经常会遇到页面中需要悬浮效果,比如最早的客服联系,对联悬浮广告等,今天为大家介绍一些如何实现div悬浮的效果. 传统的fixed实现: 通过css中的属性position参数设为f ...
- Redis做为缓存的几个问题
缓存理流程: 前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果. 1.缓存雪崩 解决方案3:如果缓存数据库是分布 ...
- 顺时针打印矩阵(剑指offer-19)
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- AHP(使用于某项目设备重要度评估测试)
用层次法和蒙特卡洛模型计算权重系数,然后建立判断矩阵进行随机一致性检验,最后求出重要度指数. string calculateStr = "1,2,3,2,1,|1,2,3,2,1,|1,2 ...
- C#中Linq查询List与DataTable和Dictionary
查询DataTable返回List List<string> listNation = dtNation.AsEnumerable().Select(d => d.Field< ...
- System.Timers.Timer(定时器)
1.System.Timers命名空间下的Timer类.System.Timers.Timer类:定义一个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()方法 ...
- java IO流 (七) 对象流的使用
1.对象流: ObjectInputStream 和 ObjectOutputStream2.作用:ObjectOutputStream:内存中的对象--->存储中的文件.通过网络传输出去:序列 ...
- SQLAlchemy(二):SQLAlchemy对数据的增删改查操作、属性常用数据类型详解
SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 目录 SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 1.用se ...
- RCNN论文阅读笔记
一摘要: 两个主要工作:1将cnn和自上而下的区域提案结合进行定位和对象分割:2当训练数据稀缺时,先预训练然后微调. rccn工作分为四步:1输入一张图片 2用selective search算法对每 ...
- J.U.C体系进阶(三)- juc-atomic 原子类框架
Java - J.U.C体系进阶 作者:Kerwin 邮箱:806857264@qq.com 说到做到,就是我的忍道! juc-atomic 原子类框架 AtomicInteger AtomicInt ...