[poj2417]Discrete Logging_BSGS
Discrete Logging poj-2417
题目大意:求$a^x\equiv b(mod\qquad c)$
注释:O(分块可过)
想法:介绍一种算法BSGS(Baby-Step Giant-Step),网上大佬说拔山盖世qwq
算法是这样的(贼难受,所以手写了)

最后,附上丑陋的代码... ...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
using namespace std;
typedef long long ll;
ll a,b,c,m,f[10000000];
map<ll,int> mp;
ll quick_power(ll x)
{
ll sum=1;
ll mid=a;
while(x)
{
if(x&1) sum=sum*mid%c;
x>>=1;
mid=(mid*mid)%c;
}
return sum;
}
int main()
{
mp.clear();
while(scanf("%I64d%I64d%I64d",&c,&a,&b)!=EOF)
{
mp.clear();
if(a%c==0) //判断a,c 是否互质,因为c 是质数,所以直接判断是否整除即可
{
printf("no solution\n");
continue;
}
int p=false;
float akkk=(float)c;
m=ceil(sqrt(akkk));
ll ans=b%c;
mp[ans]=0;
for(int i=1;i<=m;i++)//拔山过程(Baby-Step)
{
ans=(ans*a)%c;
mp[ans]=i;
}
ll t=quick_power(m); ans=1;
for (int i=1;i<=m;i++)//盖世过程(Giant-Step)
{
ans=(ans*t)%c;
if (mp[ans])
{
int t=i*m-mp[ans];
printf("%I64d\n",(t%c+c)%c);
p=true;
break;
}
}
if (!p)
printf("no solution\n");
}
}
小结:可以优化我之前写过的一些东西,感觉挺有用的。
这东西想一想就知道特判贼tm多
[poj2417]Discrete Logging_BSGS的更多相关文章
- POJ2417 Discrete Logging
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- POJ2417 Discrete Logging【BSGS】
Discrete Logging Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5577 Accepted: 2494 ...
- [POJ2417]Discrete Logging(指数级同余方程)
Discrete Logging Given a prime P, 2 <= P < 2 31, an integer B, 2 <= B < P, and an intege ...
- POJ2417 Discrete Logging【BSGS】(模板题)
<题目链接> 题目大意: P是素数,然后分别给你P,B,N三个数,然你求出满足这个式子的L的最小值 : BL== N (mod P). 解题分析: 这题是bsgs算法的模板题. #incl ...
- poj2417 Discrete Logging BSGS裸题
给a^x == b (mod c)求满足的最小正整数x, 用BSGS求,令m=ceil(sqrt(m)),x=im-j,那么a^(im)=ba^j%p;, 我们先枚举j求出所有的ba^j%p,1< ...
- POJ2417 Discrete Logging | A,C互质的bsgs算法
题目: 给出A,B,C 求最小的x使得Ax=B (mod C) 题解: bsgs算法的模板题 bsgs 全称:Baby-step giant-step 把这种问题的规模降低到了sqrt(n)级别 首 ...
- 【算法】BSGS算法
BSGS算法 BSGS算法用于求解关于x的模方程\(A^x\equiv B\mod P\)(P为质数),相当于求模意义下的对数. 思想: 由费马小定理,\(A^{p-1}\equiv 1\mod P\ ...
- 【poj2417】 Discrete Logging
http://poj.org/problem?id=2417 (题目链接) 题意 求解$${A^X≡B~(mod~P)}$$ Solution BSGS. 细节 map TLE飞,只好写了hash挂链 ...
- Discrete Logging(poj2417)
Discrete Logging Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5120 Accepted: 2319 ...
随机推荐
- PCB Genesis脚本 C#调用Python
在PCB行业,Genesis的二次开发的编程脚本越来越丰富了啊,从一开始进入眼界的Genesis脚本语言是很少的,CSH,PERL, 再后来慢慢发展,VB,易语言,VB.NET,C#,Java,TCL ...
- aixcoder智能编程助手开发插件推荐
1. aixcoder安装使用 1.1. 介绍 1.1.1. 功能 智能代码提示她用强大的深度学习引擎,能给出更加精确的代码提示: 代码风格检查她有代码风格智能检查能力,帮助开发者改善代码质量: 编程 ...
- 设计模式 | 适配器模式(adapter)
定义: 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 书中说到Gof的设计模式中,讲了两种类型的适配器模式: 1.类适配 ...
- .Net Core开源小工具mssql2mysql,从mssql生成mysql脚本
Microsoft SQL Server to MySQL 这个工具用于从MSSQL生成MySQL脚本,生成的脚本包含表结构和数据 安装 这是一个.Net Core的具具,所以需要先安装.net co ...
- php微信开放平台--第三方网页微信扫码登录(OAuth2.0)
第一.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提 ...
- python自动化测试学习笔记-5常用模块
上一次学习了os模块,sys模块,json模块,random模块,string模块,time模块,hashlib模块,今天继续学习以下的常用模块: 1.datetime模块 2.pymysql模块(3 ...
- hdu2027
http://acm.hdu.edu.cn/showproblem.php?pid=2027 #include<iostream> #include<stdio.h> #inc ...
- ios数据的基本类型和流程控制
swift的声明变量方式和js是类似的.基本类型基本都和java的差不多,多了字符类型. let:用于声明常量: var:用于声明变量: 基本类型有:double,float,Int(数字类型):bo ...
- wordpress登录账号之后才能查看页面,实例
函数: <?php auth_redirect(); ?> 例子: 要求用户登录才能查看页面 if(!is_user_logged_in()){ auth_redirect(); } 源文 ...
- Git的使用及托管代码到GitHub
首先Git是一个开源的分布式版本控制工具,用git创建代码仓库. 仓库(Repository)是用于保存版本管理所需信息的地方,本地代码 提交到 代码仓库中,如果需要还可以 再推送到 远程仓库中. 所 ...