Discrete Logging(poj 2417)
高次同余方程。 BL == N (mod P)求解最小的L。
/*
A^x=B(mod C)
设x=i*m-j(其中m=ceil(sqrt C))
并且i∈[1,m],j∈[0,m],以保证x能取到所有的0~C-1之间的数。
为什么只取到0~C-1就行了呢?
根据费马小定理 a^(p-1)=1(mod p)(p是素数),我们可以得到
a^(k mod p-1)=a^k(mod p)
即当k>p-1时,会出现类似于循环节的东西。
那么我们可以得到变形之后的式子
A^(i*m-j)=B(mod C)
化简之后为
A^(i*m)=B*A^j(mod C)
现在只需要枚举所有的j,然后把它们放到hash里,再枚举i,得到的第一个即为答案。
*/
#include<cstdio>
#include<iostream>
#include<cmath>
#include<map>
#define lon long long
using namespace std;
lon A,B,C;
map<lon,int> hash;
lon poww(lon a,lon b){
lon base=a,r=;
while(b){
if(b&) r*=base;r%=C;
base*=base;base%=C;
b>>=;
}
return r;
}
int main(){
while(scanf("%lld%lld%lld",&C,&A,&B)!=EOF){
if(A%C==){
printf("no solution\n");
continue;
}
hash.clear();
lon m=ceil(sqrt(C));
lon ans;
for(int i=;i<=m;i++){
if(!i){
ans=B%C;hash[ans]=i;
continue;
}
ans=(ans*A)%C;hash[ans]=i;
}
ans=;lon t=poww(A,m);bool fl=false;
for(int i=;i<=m;i++){
ans=(ans*t)%C;
if(hash[ans]){
ans=i*m-hash[ans];
ans=(ans%C+C)%C;
printf("%lld",ans);printf("\n");
fl=true;
break;
}
}
if(!fl) printf("no solution\n");
}
return ;
}
Discrete Logging(poj 2417)的更多相关文章
- POJ 2417 Discrete Logging (Baby-Step Giant-Step)
Discrete Logging Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2819 Accepted: 1386 ...
- POJ - 2417 Discrete Logging(Baby-Step Giant-Step)
d. 式子B^L=N(mod P),给出B.N.P,求最小的L. s.下面解法是设的im-j,而不是im+j. 设im+j的话,貌似要求逆元什么鬼 c. /* POJ 2417,3243 baby s ...
- [POJ2417]Discrete Logging(指数级同余方程)
Discrete Logging Given a prime P, 2 <= P < 2 31, an integer B, 2 <= B < P, and an intege ...
- 01背包问题:Charm Bracelet (POJ 3624)(外加一个常数的优化)
Charm Bracelet POJ 3624 就是一道典型的01背包问题: #include<iostream> #include<stdio.h> #include& ...
- Scout YYF I(POJ 3744)
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5565 Accepted: 1553 Descr ...
- (4)logging(日志模块)
日志分成几个常用的级别 debug 10 代表程序调试过程中的信息 info 20 代表普通日志信息,用户的访问等等 warning 30 警告日志,有可能出错,但是目前还没出错的 error 40 ...
- Python学习笔记:logging(日志处理)
在一个软件中,日志是可以说必不可少的一个组成部分,通常会在定位客户问题或者记录软件使用情况等场景中会用到.logging模板块是Python的一个内置标准库,用于实现对日志的控制输出,对于平常的日志输 ...
- 广大暑假训练1(poj 2488) A Knight's Journey 解题报告
题目链接:http://vjudge.net/contest/view.action?cid=51369#problem/A (A - Children of the Candy Corn) ht ...
- Games:取石子游戏(POJ 1067)
取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 37662 Accepted: 12594 Descripti ...
随机推荐
- oracle 数据导到 sql server
方法一: navicate:用法比较简单,选择工具-数据传输就可以了.目前测试了下暂时没遇到什么问题. 方法二: Microsoft SQL Server Migration Assistant 8. ...
- DROP INDEX - 删除一个索引
SYNOPSIS DROP INDEX name [, ...] [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP INDEX 从数据库中删除一个现存的索引. 要执 ...
- Nat Nanotechnol | 朱涛/陈春英等合作发现碳纳米管呼吸暴露后的延迟毒性导致小鼠原位乳腺肿瘤的多发性广泛转移
碳纳米管(Carbon nanotube, CNT)是重要的一维纳米材料,由于其良好的力学.电学和化学性能,可用作超强纤维.隐身材料.大功率超级电容器.传感器等,在纳米材料.信息.光电.能源.传感及生 ...
- debian常用指令
查看软件xxx安装内容 dpkg -L xxx 查找软件 apt-cache search 正则表达式 查找文件属于哪个包 dpkg -S filename apt-file search filen ...
- 微信小程序传值取值的几种方法
一,列表index下的取值 实现方式是:data-index="{{index}}"挖坑及e.currentTarget.dataset.index来填坑即可 1.1生成值 < ...
- [BZOJ] 4145: [AMPPZ2014]The Prices
设\(f[S][i]\)表示考虑到第\(i\)家店,已经买了集合\(S\)内的物品 一个朴素的想法是枚举子集转移 \[ f[S][i]=\min\{f[T][i-1]+cost[S\oplus T][ ...
- Spring Security 与 OAuth2(介绍)
https://www.jianshu.com/p/68f22f9a00ee Spring Security 与 OAuth2(介绍) 林塬 2018.01.23 11:14* 字数 3097 阅读 ...
- Jenkins注意点
这里要填写 在 Linux 上 生成的 git 私钥 并且带上 前后 注释 ------start ----- ---end -------
- strace用法
strace -- trace system calls and signals strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信 ...
- 配置httpd虚拟主机
轻松配置httpd的虚拟主机 httpd使用VirtualHost指令进行虚拟主机的定义.支持三种虚拟主机:基于ip,基于端口和基于名称.其中基于端口的虚拟主机在httpd的术语上(例如官方手册)也属 ...