poj2417 Discrete Logging BSGS裸题
2024-10-11 10:27:33
给a^x == b (mod c)求满足的最小正整数x,
用BSGS求,令m=ceil(sqrt(m)),x=im-j,那么a(i*m)=b*aj%p;,
我们先枚举j求出所有的baj%p,1<=j<m复杂度O(sqrt(c)),然后枚举1<=i<=m,求出a(im)在ba^j找满足条件的答案,最后的答案就是第一个满足条件的i*m-j,复杂度O(sqrt(c))
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("unroll-loops")
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 1000000007
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define fio ios::sync_with_stdio(false);cin.tie(0)
using namespace std;
const double eps=1e-6;
const int N=1000000+10,maxn=5000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
map<ll,ll>ma;
inline ll quick(ll a,ll b,ll p)
{
ll ans=1;
while(b)
{
if(b&1)ans=ans*a%p;
a=a*a%p;b>>=1;
}
return ans;
}
int main()
{
ll p,a,b;
while(~scanf("%lld%lld%lld",&p,&a,&b))
{
if(a%p==0)
{
puts("no solution");
continue;
}
ma.clear();
ll m=ceil(sqrt(p));
ll now=b%p;
ma[now]=0;
for(int i=1;i<=m;i++)
{
now=(now*a)%p;
ma[now]=i;
}
ll ans=-1,t=quick(a,m,p);now=1;
for(int i=1;i<=m;i++)
{
now=now*t%p;
if(ma[now])
{
ans=i*m-ma[now];
break;
}
}
if(ans!=-1)printf("%lld\n",(ans%p+p)%p);
else puts("no solution");
}
return 0;
}
/********************
********************/
最新文章
- Redis3 本地安装集群的记录
- Mac iTerm 很好用的终端
- 【iCore3 双核心板】【发布基于 iCore3的显示模块(包含7寸屏,4.3寸屏,vga模块等】
- Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录
- 树分治 点分治poj 2114
- u-boot移植总结(三)(转)S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A)
- js常用方法收集
- SharedPreferences实现记住密码功能
- pointcut 表达式的含义
- BYTE、WORD与DWORD类型
- php解决下单、抽奖并发导致的库存负数的问题
- javascript权威指南第6版学习笔记
- iOS开发——打开手机相册,获取图片
- 安卓和 java 学习笔记
- 自动红眼移除算法 附c++完整代码
- Google浏览器——AxureRP_for_chorme_0_6_2添加
- Chinese Mahjong UVA - 11210 (DFS)
- CF1101F Trucks and Cities
- js根据银行卡号进行判断属于哪个银行并返回银行卡类型
- WorkerMan源码分析(resetStd方法,PHP中STDIN, STDOUT, STDERR的重定向)
热门文章
- python 练习用python六剑客实现一个统计数字的个数,六剑客:(map、lambda、reduce、filter、切片、推到列表)
- IEEE发布2017年编程语言排行榜:Python高居首位,java第三,php第八
- 【运维技术】Maven + Gogs + Nexus 实现版本管理 + 代码模块开发管理
- Python入门之logging日志模块以及多进程日志
- 一篇关于Redis的好文章
- PHP 开发 api 接口安全验证
- bzoj 1179 [APIO 2009]Atm(APIO水题) - Tarjan - spfa
- noip2010 真题练习 2017.2.18
- java使用itex读取pdf,并搜索关键字,为其盖章
- tslib移植笔记(1)【转】