阶&原根
2024-08-25 18:43:16
求阶的方法:
根据性质2,直接对ϕ(m)求出因子即可,从小到大依次判断是不是符合ad = 1(mod m)(d是ϕ(m)的因子)
求最小的原根的方法:
根据性质8,对ϕ(m)求出素因子,从1开始不断测试即可,因为最小的原根很容易暴力得到。
求原根代码:(下面代码是求素数p的原根,如果不是素数,需要求出p的欧拉函数值,由于是素数,所以欧拉函数值为p-1)
ll pow(ll a, ll b, ll m)
{
a %= m;
ll ans = ;
while(b)
{
if(b & )ans = ans * a % m;
a = a * a % m;
b /= ;
}
return ans % m;
}
int tot;//素因子个数
int a[];
void get_fact(ll n)//质因数分解n
{
for(ll i = ; i * i <= n; i++)
{
if(n % i == )
{
a[tot++] = i;
while(n % i == )n /= i;
}
}
if(n != )a[tot++] = n;
}
bool g_test(ll g, ll p)//测试g是不是p的原根 此处p是素数 欧拉函数值为p - 1
{
for(ll i = ; i < tot; i++)
{
if(pow(g, (p - ) / a[i], p) == )return false;
}
return true;
}
int proot(ll p)
//求解p最小原根,本题p为素数
//返回最小的原根
{
get_fact(p - );//素数的欧拉函数值为p - 1
int g = ;
while()
{
if(g_test(g, p))return g;
g++;
}
}
最新文章
- RFID-RC522、FM1702SL、M1卡初探
- C#+ html 实现类似QQ聊天界面的气泡效果
- 详解HTML5中rel属性的prefetch预加载功能使用
- javascript面向对象方式,调用属性和方法
- 实战MySQL集群,试用CentOS 6下的MariaDB-Galera集成版
- homework-04 单词方阵
- ZOJ 2015 10月份 月赛 3911 Prime Query
- 逆转字符串leetcode
- 查看Linux声卡基本信息[转载]
- webrtc学习笔记1(建立连接基本流程)
- Java中 Linux下安装Redis
- nginx/php的redis模块扩展
- UML作业第二次:类图中类的表示
- 关于window.localtion的用法几点总结
- 【springboot】【redis】springboot结合redis,操作List集合实现时间轴功能
- js對象
- andorid EditView
- 一份不太简短的LaTeX模板
- 按键精灵如何调用Excel及按键精灵写入Excel数据的方法教程---入门自动操作表格
- SpringMyBatisDay02