数论-离散对数
时间:2019-06-12
本文章向大家介绍数论-离散对数,主要包括数论-离散对数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
首先要保证底数是原根,才有求解之说呐。
介绍一种BSGS(BabyStepGiantStep)算法,正如其名,走路分大步小步,相结合正是最好的方法。
小于$\sqrt{p}$的数打表保存,然后每次迈大步就好啦~
#include<iostream> #include<cstdio> #include<cmath> using namespace std; typedef long long i64; const int S=1e6+7; const int P=1e9+7; const int M=P-1; int bk; int f,c; int a; int h[S],p[S]; int pwr(int x,int a){ int s=1; while(a){ if(a&1) s=(i64)s*x%P; x=(i64)x*x%P; a>>=1; } return s; } void psh(int t,int x){ int k=x%S; while(h[k]){ ++k; if(k==S) k=0; } h[k]=x; p[k]=t; } int fnd(int x){ int k=x%S; while(h[k]&&h[k]!=x){ ++k; if(k==S) k=0; } return h[k]?p[k]:-1; } void init(){ bk=sqrt(P); int t=1; for(int i=0;i<bk;i++,t=(i64)t*c%P) psh(i,t); } int gtlog(int x){ int t=1,p,s=pwr(c,bk); for(int i=0;i<P;i+=bk,t=(i64)t*s%P){ p=fnd((i64)x*pwr(t,P-2)%P); if(p!=-1) return i+p; } } int main() { scanf("%d%d",&f,&c); if(pwr(c,P>>1)==1){ printf("Error"); return 0; } init(); a=gtlog(f); printf("%d\n",a); //cout<<pwr(c,a); return 0; }
原文地址:https://www.cnblogs.com/l-ly-03/p/NumberTheory-DiscreteLogarithm.html
- 基于云计算的 CV 移动交互应用研究:头部姿态估计综述(2)
- 使用 trie 树实现简单的中文分词
- 重磅发布!2017年度 DevOps 现状调查报告中文完整版!
- AI 泡沫前,我们怎么办?中美两国人工智能产业发展全面解读
- 养车记账本小程序开发实例
- 基于图像识别的自动化
- 主从同步中的关键技术解析
- 腾讯织云:DevOps 流水线应用平台践行之路
- 腾讯云 GAME-TECH 沙龙干货回顾:与腾讯云携手出海
- 陈杰:无服务器架构,让云端开发更纯粹
- 王磊:AI 时代物流行业的 OCR 应用
- 张兴华:云端架构助力企业快速成长
- 腾讯云GAME-TECH沙龙干货回顾:腾讯游戏云全球化实践
- 基于内容关键性的高效 FEC 抗网络丢包算法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Chrome 技术篇-常用web调试手法:清除缓存并硬性重新加载
- 数据库之索引模块
- Python 爬虫篇-爬取web页面所有可用的链接实战演示,展示网页里所有可跳转的链接地址
- Python爬虫,微信公众号话题标签内容采集打印PDF输出
- Windows 技术篇-设置dns提升网速,刷新dns缓存
- 搭建高可用的Replication集群归档大量的冷数据
- Python 技术篇-文件操控:文件的移动和复制
- Python发邮件脚本,Python调用163邮箱SMTP服务实现邮件群发
- 为PXC集群引入Mycat并构建完整的高可用集群架构
- Python3 字典
- 安装Percona Server数据库(in CentOS 8)
- Python 基础篇-正斜杠("/")和反斜杠("")的用法
- 在CentOS8下搭建PXC集群
- Python 基础篇-相对路径、绝对路径的写法
- Python3 元组