/**************************************************************
Problem: 3285
User: idy002
Language: C++
Result: Accepted
Time:756 ms
Memory:32072 kb
****************************************************************/ #include <cstdio>
#include <cmath>
#include <cstring>
#include <cctype>
#define N 1000010 typedef long long dnt; const int Hmod = ;
struct Hash {
int head[N], key[N], val[N], next[N], etot;
void init() {
etot = ;
memset( head, , sizeof(head) );
}
void insert( int k, int v ) {
int kk = k%Hmod;
etot++;
key[etot] = k;
val[etot] = v;
next[etot] = head[kk];
head[kk] = etot;
}
int query( int k ) {
int kk = k%Hmod;
for( int t=head[kk]; t; t=next[t] )
if( key[t]==k ) return val[t];
return -;
}
}hash; dnt mpow( dnt a, int b, int c ) {
dnt rt;
for( rt=; b; b>>=,a=(a*a)%c )
if( b& ) rt=(rt*a)%c;
return rt;
}
int findroot( int p ) {
int phi = p-;
int tmp = phi;
int stk[], top;
top = ;
for( int i=; i<=(<<); i++ ) {
if( tmp%i== ) {
stk[++top] = i;
do {
tmp/=i;
}while( tmp%i== );
}
}
if( tmp!= )
stk[++top] = tmp;
for( int r=; ; r++ ) {
bool ok = true;
for( int i=; i<=top; i++ ) {
if( mpow(r,phi/stk[i],p)== ) {
ok=false;
break;
}
}
if( ok ) return r;
}
}
dnt ind( dnt r, int a, int p ) { // ind_r(a) mod p-1
int m = ceil(sqrt(p-));
hash.init();
dnt cur = ;
for( int i=; i<m; i++ ) {
if( cur==a ) return i;
hash.insert( cur, i );
cur = (cur*r) % p;
}
dnt base;
base = cur = mpow(cur,p-,p);
for( int i=m; i<p; i+=m,cur=(cur*base)%p ) {
int j = hash.query( a*cur%p );
if( j!=- ) return i+j;
}
return -; // impossible
}
dnt gcd( dnt a, dnt b ) {
return b ? gcd(b,a%b) : a;
}
void exgcd( dnt a, dnt b, dnt &d, dnt &x, dnt &y ) {
if( b== ) {
d=a, x=, y=;
} else {
exgcd(b,a%b,d,y,x);
y-=a/b*x;
}
}
dnt meq( dnt a, dnt b, dnt c ) { // ax=b mod c
dnt d, dd, x, y;
a = (a%c+c)%c;
b = (b%c+c)%c;
d = gcd(a,c);
if( b%d!= ) return -;
exgcd(a/d,c/d,dd,x,y);
x = x*(b/d);
x = (x%(c/d)+(c/d))%(c/d);
if( x== ) x+=c/d;
return x;
} dnt a, b, c, g, p, r;
int aa[N], bb[N], cc[N], gg[N]; void read( int a[] ) {
int i;
char ch;
for( i=; isdigit(ch=getchar()); i++ )
a[i] = ch-'';
a[i] = -;
}
dnt modulo( int a[], dnt mod ) {
dnt rt = ;
for( int i=; a[i]!=-; i++ )
rt = (rt* + a[i]) % mod;
return rt;
}
int main() {
read(aa);
read(bb);
read(cc);
read(gg);
scanf( "%lld", &p );
a = modulo(aa,p-);
b = modulo(bb,p-),
c = modulo(cc,p);
g = modulo(gg,p); if( g%p== || c%p== ) {
if( g%p== && c%p== )
printf( "1\n" );
else
printf( "no solution\n" );
return ;
}
r = findroot(p);
// fprintf( stderr, "%d\n", (int)r );
dnt ans = meq( a*ind(r,g,p), ind(r,c,p)-b*ind(r,g,p), p- );
if( ans< )
printf( "no solution\n" );
else
printf( "%lld\n", ans );
}

bzoj 3285 离散对数解指数方程的更多相关文章

  1. bzoj 3751: [NOIP2014]解方程 同余系枚举

    3.解方程(equation.cpp/c/pas)[问题描述]已知多项式方程:a ! + a ! x + a ! x ! + ⋯ + a ! x ! = 0求这个方程在[1, m]内的整数解(n 和 ...

  2. 牛顿迭代法解指数方程(aX + e^x解 = b )

    高中好友突然问我一道这样的问题,似乎是因为他们专业要做一个计算器,其中的一道习题是要求计算器实现这样的功能. 整理一下要求:解aX + e^X = b 方程.解方程精度要求0.01,给定方程只有一解, ...

  3. bzoj 3751: [NOIP2014]解方程

    Description 已知多项式方程: a0+a1x+a2x^2+...+an*x^n=0 求这个方程在[1,m]内的整数解(n和m均为正整数). 解题报告: 这题比较诡,看到高精度做不了,就要想到 ...

  4. BZOJ 3751: [NOIP2014]解方程 数学

    3751: [NOIP2014]解方程 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3751 Description 已知多项式方程: ...

  5. bzoj 3751: [NOIP2014]解方程【数学】

    --我真是太非了,自己搞了7个质数都WA,从别人那粘5个质数就A了-- 就是直接枚举解,用裴蜀定理计算是否符合要求,因为这里显然结果很大,所以我们对多个质数取模看最后是不是都为0 #include&l ...

  6. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  7. bzoj 2654 && bzoj 3675 总结

    手动博客搬家: 本文发表于20180929 15:18:55, 原地址https://blog.csdn.net/suncongbo/article/details/82897992 最近做到了两道( ...

  8. bzoj1644 / P1649 [USACO07OCT]障碍路线Obstacle Course

    P1649 [USACO07OCT]障碍路线Obstacle Course bfs 直接上个bfs 注意luogu的题目和bzoj有不同(bzoj保证有解,还有输入格式不同). #include< ...

  9. BZOJ4869:[SHOI2017]相逢是问候——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=4869 题面复制于洛谷:https://www.luogu.org/problemnew/show/P ...

随机推荐

  1. Javascript你不知道的那些事!(数字计算篇-变态篇)无意中聊天发现的一些奇怪的事情

    javascript:alert(0.1 + 0.2) 如果看到这样一道题你会怎么思考了!大家肯定第一反应0.3,但是考虑到我已经这样问了!那么幼稚的答案我会专门写篇文章吗 然后人就开始折磨自己了会不 ...

  2. [转载]Juicer – 一个Javascript模板引擎的实现和优化

    http://ued.taobao.org/blog/2012/04/juicer-%E4%B8%80%E4%B8%AAjavascript%E6%A8%A1%E6%9D%BF%E5%BC%95%E6 ...

  3. 利用requestAnimationFrame和Tween算法实现兼容所有浏览器的运动动画,直接秒杀Css3动画

    以下贴出Tween的代码: /* * Tween.js * t: current time(当前时间): * b: beginning value(初始值): * c: change in value ...

  4. .gitignore 失效问题解决

    对于Git,已经跟踪的文件,再加入到.gitignore中,会使忽略失效.使用下面3个命令使它重新生效 git rm -r --cached . git add . git commit -m &qu ...

  5. Linux - awk 文本处理工具五

    awk 线上处理常用模式 awk 处理复杂日志 6.19: DHB_014_号百总机服务业务日报:广州 到达数异常! DHB_023_号百漏话提醒日报:珠海 到达数异常! 6.20: DHB_014_ ...

  6. 第13月第25天 ios11 uitableview reloaddata contentsize

    1. [tableView reloadData]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_ ...

  7. rsync更改端口后的同步办法

    rsync有两种常用的认证方式,一种为rsync-daemon方式,另外一种则是ssh. 在一些场合,使用rsync-daemon方式会比较缺乏灵活性,ssh方式则成为首选.但是今天实际操作的时候发现 ...

  8. Dream------Hadoop--网络拓扑与Hadoop--摘抄

    两个节点在一个本地网络中被称为“彼此的近邻”是什么意思?在高容量数据处理中,限制因素是我们在节点间 传送数据的速率-----带宽很稀缺.这个想法便是将两个节点间的带宽作为距离的衡量标准.   衡量节点 ...

  9. linux网络配置原理

    一.网络连接的基本原理 http://www.cnblogs.com/dyllove98/archive/2013/08/06/3241294.html

  10. Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】

    原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.c ...