数论

这个幂指数很难搞,那么我们取个log

去取log得有底数,那么自然这个底数能表示出所有的数

原根满足这个性质

那么我们求出原根,再去log

变成k*ind(x)=ind(a) (mod phi(p))

phi(p)=p-1

又因为g^ind(a)=a (mod p)

那么我们用bsgs求出ind(a)

那么我们就要解出ind(x)的所有解,用exgcd

然后求出最小自然数数解,然后通解是x+b*t

那么每次加b就行了

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + ;
int p, k, a, top;
ll Ans[N], st[N];
ll power(ll x, ll t)
{
ll ret = ;
for(; t; t >>= , x = x * x % p) if(t & ) ret = ret * x % p;
return ret;
}
int find_root(int p)
{
if(p == ) return ;
int tmp = p - ;
for(int i = ; i * i <= p; ++i) if(tmp % i == )
{
st[++top] = i;
while(tmp % i == ) tmp /= i;
}
if(tmp != ) st[++top] = tmp;
for(int g = ; g < p; ++g)
{
bool flag = true;
for(int j = ; j <= top; ++j)
{
if(power(g, (p - ) / st[j]) == )
{
flag = false;
break;
}
}
if(flag) return g;
}
return -;
}
int bsgs(int a, int b, int p)
{
map<ll, int> mp;
int m = sqrt(p);
ll x = , pw = power(a, m);
for(int i = ; i <= m; ++i)
{
mp[x] = i * m;
x = x * pw % p;
}
x = ;
for(int i = ; i < m; ++i)
{
ll tmp = power(x, p - ) * b % p;
if(mp.find(tmp) != mp.end()) return mp[tmp] + i;
x = x * a % p;
}
}
ll exgcd(ll a, ll b, ll &x, ll &y)
{
if(b == )
{
x = ;
y = ;
return a;
}
int ret = exgcd(b, a % b, y, x);
y -= (a / b) * x;
return ret;
}
int main()
{
cin >> p >> k >> a;
ll g = find_root(p), c = bsgs(g, a, p), b = p - , x, y, gcd = exgcd(k, b, x, y);
if(c % gcd != ) return puts(""), ;
c /= gcd;
b /= gcd;
k /= gcd;
x = (x * c % b + b) % b;
while(x < p)
{
Ans[++Ans[]] = power(g, x);
x += b;
}
sort(Ans + , Ans + Ans[] + );
printf("%d\n", Ans[]);
for(int i = ; i <= Ans[]; ++i) printf("%lld\n", Ans[i]);
return ;
}

bzoj1319的更多相关文章

  1. BZOJ2219数论之神——BSGS+中国剩余定理+原根与指标+欧拉定理+exgcd

    题目描述 在ACM_DIY群中,有一位叫做“傻崽”的同学由于在数论方面造诣很高,被称为数轮之神!对于任何数论问题,他都能瞬间秒杀!一天他在群里面问了一个神题: 对于给定的3个非负整数 A,B,K 求出 ...

  2. 【bzoj2219-数论之神】求解x^a==b(%n)-crt推论-原根-指标-BSGS

    http://www.lydsy.com/JudgeOnline/problem.php?id=2219 弄了一个晚上加一个午休再加下午一个钟..终于ac..TAT 数论渣渣求轻虐!! 题意:求解 x ...

随机推荐

  1. 【iOS】UIWebView的HTML5扩展之canvas篇

    先前公布大那个所谓的"HTML5"扩展严格说来还算不是"HTML5".曲曲几行JS代码就自诩为HTML5扩展多少有些标题党的嫌疑. 而相比之下,本篇的主题can ...

  2. shell(1):网络配置、BATH环境和通配符

    一.临时配置网络(ip,网关,dns) ifconfig查看网络配置 修改ip地址  ifconfig ens33 192.168.255.129/24 ens33网卡名称.192.168.255.1 ...

  3. 如何去掉Google搜索的跳转 让你的Google搜索不被reset掉

    http://www.nowamagic.net/librarys/veda/detail/389 在点击google搜索结果时,google会在结果的URL前做个跳转,且有时这个跳转地址会被墙,这样 ...

  4. RabbitMQ的工作模式

    简单模式: # #########################基于简单模式的 生产者 ######################### #!/usr/bin/env python import ...

  5. Error (167005): Can't assign I/O pad "GX_TX" to PIN_AG27 because this causes failure in the placement of the other atoms in its associated channel

    1.同时在两个GX的bank,建立两GX ip core 会出现 两个IP的cal_blk_clk信号,要保持是同一个时钟

  6. C#.NET开源项目、机器学习、Power BI (转载)

    .NET技术, 开源项目, 数据挖掘, 机器学习, 微软Power BI, 足球赛事分析, Matlab与C#编程 博客园 管理 本站首页 头条推荐 Power BI .NET开源 机器学习 博客美化 ...

  7. import caffe时出错:can not find module skimage.io

    import caffe时出错:can not find module skimage.io  //以下内容在ubuntu16.4上实际验证过.注意大小写的.----20170605 在命令行输入Py ...

  8. ajax 实现三级联动下拉菜单

    ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里我用了数据库中的chinastates表, 数据库内容很多,三级联动里的地区名称都在里面,采用的是代号副代号的方式 比如 ...

  9. EasyRTMP实现将RTSP流转换成RTMP流实现RTSP直播转RTMP直播的功能

    本文转自EasyDarwin开源团队Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52951311 EasyRTMP EasyRTMP ...

  10. Struts2中数据封装机制

    Struts2当中数据封装的三种机制:属性驱动.标签驱动.模型驱动.下面来一一介绍. 一.属性驱动 1.需要提供对应属性的set方法进行数据的封装. 2.表单的哪些属性需要封装数据,那么在对应的Act ...