原根结论记录
定义
两个数 ,其中满足 的最小 为 时,称 是 的一个原根。
结论
- 一个数有原根当且仅当他是形如 (其中 是奇素数)
- 一个数 的原根个数为
- 设一个数的最小原根为 ,则其所有原根都可以表示为 (其中 )
实现
首先寻找最小的原根,而最小的原根的充要条件有下面两个:
- 是最小的满足 的 ,那么这个的判断方法就是求出 的所有质因子 ,判断对于任意的 是否满足
代码实现
Code
#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
long long x=0,f=1;char ch=getchar();
while(!isdigit(ch)&&ch!='-')ch=getchar();
if(ch=='-')f=-1,ch=getchar();
while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return x*f;
}
bool exist[2001010],flag,vis[2001010];
long long prim[2001010],tn,j,up,len,final[2001010];
long long i,n,gap,tem,w,down,now,phi[2001010],factor[2001010];
long long pow(long long x,long long y,long long p){
long long ans=1;
for (;y;y>>=1,x=x*x % p)
if (y&1) ans=ans*x % p;
return ans;
}
void Main(){
n=read();gap=read();
if (exist[n]==false) {puts("0");puts("");return ;}
printf("%lld\n",phi[phi[n]]);
tem=phi[n];w=0;
for (i=2;i<=sqrt(phi[n]);i++)
if (tem % i==0){
factor[++w]=i;
while (tem % i==0) tem/=i;
}
if (tem>1) factor[++w]=tem;
down=0;
for (now=1;now<n;now++)
if (pow(now,phi[n],n)==1){
flag=true;
for (j=1;j<=w;j++)
if (pow(now,phi[n]/factor[j],n)==1)
flag=false;
if (flag){
down=now;break;
}
}
tn=0;now=1;
for (up=1;up<=phi[n];up++){
now=now*down % n;
if (__gcd(up,phi[n])==1) final[++tn]=now;
}
sort(final+1,final+tn+1);
for (i=1;i<=tn/gap;i++) printf("%lld ",final[i*gap]);
puts("");
}
int main()
{
int Testing=read();up=1e6;
phi[1]=1;
for (int i=2;i<=up;i++){
if (vis[i]==false) {
phi[i]=i-1;
prim[++len]=i;
}
for (j=1;j<=len&&i*prim[j]<=up;j++){
vis[i*prim[j]]=true;
phi[i*prim[j]]=phi[i]*phi[prim[j]];
if (i % prim[j]==0) {
phi[i*prim[j]]=phi[i]*prim[j];
break;
}
}
}
exist[2]=exist[4]=true;
for (i=2;i<=len;i++)
for (j=prim[i];j<=up;j=j*prim[i]) {
exist[j]=true;
if (j*2<=up) exist[j*2]=true;
}
for (;Testing;Testing--) Main();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下