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 ...
随机推荐
- Surrounded Regions 包围区域——dfs
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...
- Resharper 8.2的“安装”问题
概述 完美解决Resharper 8.2的“安装”问题和VS2012写Javascript语句无法智能提示的问题: 目录 引言——Resharper 简介——安装——VS2012智能提示测试 引言 最 ...
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
原文链接:C语言结构体里的成员数组和指针 复制例如以下: 单看这文章的标题,你可能会认为好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Lar ...
- 使用".."指定git提交范围与"..."指定git提交范围的区别
http://blog.csdn.net/hansel/article/details/8952967 使用".."(两个点)和"..."(三个点)都可以指定一 ...
- jsp表达式
能够在"<%="和"%>"之间插入一个表达式(注意:不可插入语句. "<%="是一个完整的符号,"<%&q ...
- JavaScript读书笔记(3)-操作符、语句和函数
1. 操作符 (1) 一元操作符 前置递增和递减操作符,变量的值都是在语句被求值以前改变的:后置相反 (2) 位操作符 在ECMAScript中,对数值进行位操作时,会发生以 ...
- Webview页面的控件元素定位
前言 现在有很多App都是Hybrid的,即有原生的页面又有Webview的页面,元素的可以通过uiautomatorviewer工具 进行控件元素的定位,Webview页面的则无法通过此方式定位,而 ...
- 登录和注册(Js)的写法
今天在做小组项目的时候发现登录和注册的使用不是很熟,记录下来: <script> //弹出框中的css部分 input { font-family: Arial, sans-serif;} ...
- EasyDarwin开源音频解码项目EasyAudioDecoder:EasyPlayer Android音频解码库(第二部分,封装解码器接口)
上一节我们讲了如何基于ffmpeg-Android工程编译安卓上的支持音频的ffmpeg静态库:http://blog.csdn.net/xiejiashu/article/details/52524 ...
- vue http 请求
https://github.com/vuejs/awesome-vue#http-requests vue-resource - npm https://www.npmjs.com/package/ ...