bzoj1319
数论
这个幂指数很难搞,那么我们取个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的更多相关文章
- BZOJ2219数论之神——BSGS+中国剩余定理+原根与指标+欧拉定理+exgcd
题目描述 在ACM_DIY群中,有一位叫做“傻崽”的同学由于在数论方面造诣很高,被称为数轮之神!对于任何数论问题,他都能瞬间秒杀!一天他在群里面问了一个神题: 对于给定的3个非负整数 A,B,K 求出 ...
- 【bzoj2219-数论之神】求解x^a==b(%n)-crt推论-原根-指标-BSGS
http://www.lydsy.com/JudgeOnline/problem.php?id=2219 弄了一个晚上加一个午休再加下午一个钟..终于ac..TAT 数论渣渣求轻虐!! 题意:求解 x ...
随机推荐
- H2数据库集群
H2数据库集群 1. H2数据库简单介绍 1.1 H2数据库优势 经常使用的开源数据库:H2,Derby,HSQLDB.MySQL,PostgreSQL. 当中H2,HSQLDB相似,十分适合作为嵌入 ...
- MySQL双主热备问题处理
1. Slave_IO_Running: No mysql> show slave status\G *************************** 1. row *********** ...
- [Node.js] 關於 console.log 的格式化輸出
Node.js 當中的 console.log,除了基本字串的輸出之外,還可以利用 %s.%d.%j 格式化的輸出,就讓我們來看些例子吧! 一.範例1 (字串輸出):console.js consol ...
- 利用CH341A编程器刷新BIOS,恢复BIOS,妈妈再也不用担心BIOS刷坏了
前几天,修电脑主析就捣鼓刷BIOS,结果刷完黑屏开不了机,立刻意识到完了,BIOS刷错了.就从网上查资料,各种方法试了个遍,什么用处都没有.终于功夫不负有心人,找到了编码器,知道了怎么用.下面看看具体 ...
- TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派
TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派 来源:DataCastle数据城堡 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学 ...
- docker与jenkins学习
docker命令: docker create <image-id>docker start <container-id>docker run <image-id> ...
- codeforces Looksery Cup 2015 H Degenerate Matrix
The determinant of a matrix 2 × 2 is defined as follows: A matrix is called degenerate if its determ ...
- javascript正则表达式提取子匹配项
C#里所用的正则表达式,如果要提取字符串里的子匹配项(我都不知道那个叫啥名字,别名?)是很方便的,比如: Regex rx = new Regex(@"<title>(?< ...
- types of transfrmations
http://math.wallawalla.edu/~duncjo/courses/math113/winter08/notes/9-1_math113.pdf Name What Changes ...
- 6.JS输出
JavaScript 通常用于操作 HTML 元素. ① document.getElementById(id),可以访问某个 HTML 元素 请使用 "id" 属性来标识 HTM ...