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 ...
随机推荐
- 01_3Java Application初步
01_3Java Application初步 l Java源文件以“java”为扩展名.源文件的基本组成部分是类(class),如本例中的HelloWorld类. l 一个源文件中最多只有一个publ ...
- Linux运维笔记--第三部
第三部 3. Linux系统文件重要知识初步讲解 # ls -lhi (i: inode,每个文件前的数字代表文件身份ID:h: human 人类可读) 显示:25091 -rw-r--r-- ...
- BZOJ-1833(数位DP)
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll a,b; int k[20]; ll dp[2 ...
- 【动态规划】bzoj1705: [Usaco2007 Nov]Telephone Wire 架设电话线
可能是一类dp的通用优化 Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设 ...
- 【思维题 并查集 图论】bzoj1576: [Usaco2009 Jan]安全路经Travel
有趣的思考题 Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i Output * 第1..N-1行: 第 ...
- redis学习笔记(3)
redis学习笔记第三部分 --redis持久化介绍,事务,主从复制 三,redis的持久化 RDB(Redis DataBase)AOF(Append Only File) RDB:在指定的时间间隔 ...
- 在物理机上,用U盘安装esxi虚拟化环境
一般使用U盘安装centos镜像,可使用镜像刻录工具UltraISO,详细方法参照如下链接: https://jingyan.baidu.com/article/647f0115ee55ba7f214 ...
- MyBatis的mapper.xml文件的参数问题:org.apache.ibatis.builder.IncompleteElementException: Could not find parameter map
配置参数类型有两种选择,即:parameterType和parameterMap 不管参数是否是基本数据类型还是map类型,都是使用parameterType. 版权声明:本文为博主原创文章,未经博主 ...
- 17.Yii2.0框架模型添加记录
目录 新建控制器 HomeController.php 新建model Article.php 新建控制器 HomeController.php D:\xampp\htdocs\yii\control ...
- HashMap存储原理
1. HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. ...