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 ...
随机推荐
- c语言-完全背包问题
完全背包问题 问题:有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 分 ...
- 从主机给VM Copy文件
不能从主机给VM 复制文件,在VM里,setting --->option--->shareFolder-->enable-->add(要share的文件路径) then=== ...
- C#特性类的使用
特性类的使用过程: 第一步:定义一个特性类,定义一些成员来包含验证时需要的数据:第二步:创建特性类实例:创建一个特性类的实例,里面包含着验证某一个属性或者字段需要的数据.将该实例关联到某个属性上面.第 ...
- #include <sys/socket.h>找不到头文件
ubuntu下socket编程涉及到头文件sys/socket.h 和sys/types.h.我是用的codeblocks编辑器,当我想查看socket,h头文件时编辑器提示找不到头文件. 我就想可能 ...
- IOS 单元测试
本文转载至 http://blog.csdn.net/fengsh998/article/details/8109293 IOS 自带单元测试. 1.在创建时,将include Unit Tests钩 ...
- 【计蒜客2017NOIP模拟赛1】
D1T1 题面 题解:一开始以为傻题,旋转个坐标系就行了,结果光荣爆零~ 结果发现旋转坐标系后,由于多了一些虚点,锤子砸到虚点上了~gg [没有代码] D1T2 题面 题解:计算出每个边对答案的贡献即 ...
- 九度OJ 1116:加减乘除 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1466 解决:902 题目描述: 根据输入的运算符对输入的整数进行简单的整数运算. 运算符只会是加+.减-.乘*.除/.求余%.阶乘!六个运 ...
- curl is a tool to transfer data from or to a server curl POST
https://curl.haxx.se/docs/manpage.html curl is a tool to transfer data from or to a server, using on ...
- 创建私有maven库
在公司搭建私有maven库,我为了在本机做测试,我选择Sonatype nexus oss,在docker里面安装 1.Mac上安装docker 下载地址:https://github.com/boo ...
- AndroidPageObjectTest_Chained.java
以下代码使用ApiDemos-debug.apk进行测试 //这个脚本用于演示PageFactory的功能:链式注解@AndroidFindBys.@IOSFindBys.具体用法参考页面类的代码. ...