Contest 20140923 登月计划 BabyStepGaintStep
登月计划
- 总时间限制:
- 40000ms
- 内存限制:
- 256000kB
- 描述
-
HJA在和学弟学数学,于是便有了一道非常简单的数学题:求满足 的最小自然数x。
- 输入
- 输入数据一行三个正整数a、b、p,我们保证p是一个质数。
- 输出
- 一行一个整数代表最小的自然数x,如果不存在这样的x输出-1。
- 样例输入
-
2 1 3
- 样例输出
-
0
- 提示
- 对于30%的数据,1≤p≤1000。
对于100%的数据,1≤a,b<p≤10^12。< dd=""> - 来源
- zhonghaoxi
BabyStepGiantStep
這道題考場上卡在了求解 a*x == b (mod p) 這一步上。
解a*x == b (mod p) 方法爲
a * b^(-1) * x == 1 (mod p)
x= (a*b^(-1))^(-1)
然而這樣還是要TLE,觀察發現其中每次求值時a總會乘上一個常數t,則x每次乘上t^(-1)就行了
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<string>
#include<queue>
using namespace std;
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
#define MAXN 1100000
#define MAXV MAXN*2
#define MAXE MAXV*2
#define INF 0x3f3f3f3f
#define INFL 0x3f3f3f3f3f3f3f3fLL
#define VAL1 1000007
#define PROB "braveheart"
typedef long long qword;
qword base,res,mod; struct Edge
{
qword t,v;
Edge *next;
}E[MAXE],*V[VAL1+];
int tope=-;
void addedge(int x,qword y,qword z)
{
E[++tope].t=y;
E[tope].v=z;
E[tope].next=V[x];
V[x]=&E[tope];
}
inline qword multi(qword x,qword y)
{
qword ret=;
if (y<)y=-y,x=-x;
while (y)
{
if (y&)ret=(ret+x)%mod;
x=(x+x)%mod;
y>>=;
}
return ret;
}
qword pow_mod(qword x,qword y,qword mod)
{
qword ret=;
while (y)
{
if (y&)ret=multi(ret,x);
x=multi(x,x);
y>>=;
}
return ret;
} int main()
{
freopen(PROB".in","r",stdin);
freopen(PROB".out","w",stdout);
int i;
qword x,y,z;
scanf(LL LL LL,&base,&res,&mod);
int sb=ceil(sqrt(mod-));
//baby step
x=;
for (i=;i<sb;i++)
{
addedge(x%VAL1,i,x);
x=multi(x,base);
}
qword val1;
val1=pow_mod(base,sb,mod);
qword a_i=;
Edge *ne;
bool flag=false;
qword t;
x=res%mod;
y=pow_mod(val1,mod-,mod);
for (i=;i<=sb;i++)
{
for (ne=V[x%VAL1];ne;ne=ne->next)
{
if (ne->v==x)
{
flag=true;
t=ne->t;
}
}
if (flag)
{
printf(LL "\n",(qword)i*sb+t);
return ;
}
x=multi(x,y);
}
printf("-1\n");
return ;
}
Contest 20140923 登月计划 BabyStepGaintStep的更多相关文章
- 阿波罗11号登月飞船电脑控制系统源码(AGC)
阿波罗11号登月飞船电脑控制系统源码(AGC) http://download.csdn.net/detail/downiis6/9574926 down url: https://github.co ...
- 2018年 7月总结&8月计划
7月悄然而过... 英语: a打卡率:1号上课没有完成听力,7号上课没有完成阅读,21,22号考试 没有阅读 PS:学习效果测评 1)不要再阅读china English 2)单词要拼写 3)听力句子 ...
- RQNOJ PID192 梦幻大PK [2017年6月计划 二分图02]
PID192 / 梦幻大PK ☆ 提交你的代码 查看讨论和题解 你还木有做过哦 我的状态 查看最后一次评测记录 质量 7 题目评价 质量 7 ★★★★★ ★★★★☆ ★★★☆☆ ★★☆ ...
- HDU3078 Network [2016年6月计划 树上问题05]
Network Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- HDU3887 Counting Offspring [2017年6月计划 树上问题03]
Counting Offspring Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- 洛谷P2912 [USACO08OCT]牧场散步Pasture Walking [2017年7月计划 树上问题 01]
P2912 [USACO08OCT]牧场散步Pasture Walking 题目描述 The N cows (2 <= N <= 1,000) conveniently numbered ...
- Contest 20140923 潛行世界 拓撲排序,期望
潜行世界 查看 提交 统计 提问 总时间限制: 10000ms 内存限制: 256000kB 描述 HJA和学弟还在旅游中,这次他们来到了潜行世界.潜行世界是一个N个点M条边的有向无环图.每条路对 ...
- 洛谷P1368 均分纸牌(加强版) [2017年6月计划 数论14]
P1368 均分纸牌(加强版) 题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,纸牌总数必为 N 的倍数.可以在任一堆上取1张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取 ...
- 洛谷P1621 集合 [2017年6月计划 数论13]
P1621 集合 题目描述 现在给你一些连续的整数,它们是从A到B的整数.一开始每个整数都属于各自的集合,然后你需要进行一下的操作: 每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于P的公共 ...
随机推荐
- OpenGL ES2学习笔记(9)-- 转换矩阵
线性代数是计算机图形学的一块基石,本篇文章总结如何在Shader中使用矩阵来移动.缩放和旋转顶点. 代码和效果 把下面的代码复制到OpenGL Console里: import java.nio.By ...
- 1032 - Intersecting Dates
A research group is developing a computer program that will fetch historical stock market quotes fro ...
- iOS判断iPhone型号
链接: http://stackoverflow.com/questions/11197509/ios-how-to-get-device-make-and-modelhttp://stackover ...
- 8086FLAG寄存器
8086中的FLAG寄存器也就是状态标志位寄存器.它用来存储一些指令的计算结果,比如加法减法中的进位:为CPU运行某些命令提供根据,比如DF它决定是往前走指针还是向后走指针:总之状态寄存器存放的被称为 ...
- android打包签名介绍
Keytool 是一个有效的安全钥匙和证书的管理工具. Java 中的 keytool.exe (位于 JDK\Bin 目录下)可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存 ...
- 加密算法 DES 3DES RSA AES 简介
数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为[密文],使其只能在输入相应的[密钥]之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人 ...
- 开源 android
Android经典的开源项目其实非常多,但是国内的博客总是拿着N年前的一篇复制来复制去,实在是不利于新手学习.今天爬爬把自己熟悉的一些开源项目整理起来,希望能对Android开发同学们有所帮助.另外, ...
- java 子类重写父类的方法应注意的问题
若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求! A.重写规则之一: 重写方法不能比被重写方法限制有更严格的访问级别.(但是可以更广泛,比如父类方法是包访问权限,子类的重写方法 ...
- Object传入String类型和其他
是可以传入的. package com.sun.test; public class Test03 { /** * @param args */ public static void main(Str ...
- HTML5 <a>标签download 属性
一.简单实例 <a href="../images/1.jpg" download="下载图片.jpg"> 点击按钮下载 </a> 二. ...