数论

这个幂指数很难搞,那么我们取个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. SqlServer查询语句中用到的锁

    前段时间**公司DBA来我们这培训.讲了一大堆MYSQL的优化. QA环节一程序员问“SQL语句中的 with nolock 除了不锁表外,是否能读其他锁住的数据". 讲课的人嘟嘟了半天没解 ...

  2. 数据库历险记(三) | 缓存框架的连环炮 数据库历险记(二) | Redis 和 Mecached 到底哪个好? 数据库历险记(一) | MySQL这么好,为什么还有人用Oracle? 面对海量请求,缓存设计还应该考虑哪些问题?

    数据库历险记(三) | 缓存框架的连环炮   文章首发于微信公众号「陈树义」,专注于 Java 技术分享的社区.点击链接扫描二维码,与500位小伙伴一起共同进步.微信公众号二维码 http://p3n ...

  3. Allegro基本操作——PCB布线

    转:http://blog.sina.com.cn/s/blog_1538bc9470102vyyq.html http://www.elecfans.com/article/80/110/2010/ ...

  4. liunx安装pip

    安装pip之前要先安装Anaconda. 1.下载: # wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar. ...

  5. liunx安装redis和gcc

    首先去上下载redis,我现在用的版本是:redis-3.0.4.tar.gz 然后放到虚拟机里面解压,下面是三种解压命令: tar -zxvf file.tar.gz tar -jcvf file ...

  6. Spring里bean之间的循环依赖解决与源码解读

    通过前几节的分析,已经成功将bean实例化,但是大家一定要将bean的实例化和完成bean的创建区分开,bean的实例化仅仅是获得了bean的实例,该bean仍在继续创建之中,之后在该bean实例的基 ...

  7. 何时使用Entity或DTO

    关注公众号: 锅外的大佬 每日推送国外优秀的技术翻译文章,励志帮助国内的开发者更好地成长! JPA和Hibernate允许你在JPQL和Criteria查询中使用DTO和Entity作为映射.当我在我 ...

  8. 网络爬虫(蜘蛛)Scrapy,Python安装!

    Scrapy,Python安装.使用! 1.下载安装Python2.7.6.由于Scrapy还不支持3.x版本号. Latest Python 2 Release - Python 2.7.6,安装时 ...

  9. angular cannot get /

    每次遇到这问题都一脸懵逼,好像自己啥都没改咋就悲剧了 目前知道的办法是在命令行运行ng serve,它会告诉你详细错误 因为我是通过asp.net core的集成环境运行的,它没显示出详细错误

  10. LESS和sa

    一. Sass/Scss.Less是什么? Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,Sass语法属于缩排语法,比css比多出好些功能(如变量 ...