登月计划

总时间限制: 
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的更多相关文章

  1. 阿波罗11号登月飞船电脑控制系统源码(AGC)

    阿波罗11号登月飞船电脑控制系统源码(AGC) http://download.csdn.net/detail/downiis6/9574926 down url: https://github.co ...

  2. 2018年 7月总结&8月计划

    7月悄然而过... 英语: a打卡率:1号上课没有完成听力,7号上课没有完成阅读,21,22号考试 没有阅读 PS:学习效果测评 1)不要再阅读china English 2)单词要拼写 3)听力句子 ...

  3. RQNOJ PID192 梦幻大PK [2017年6月计划 二分图02]

    PID192 / 梦幻大PK ☆ 提交你的代码 查看讨论和题解 你还木有做过哦 我的状态         查看最后一次评测记录 质量 7 题目评价 质量 7 ★★★★★ ★★★★☆ ★★★☆☆ ★★☆ ...

  4. HDU3078 Network [2016年6月计划 树上问题05]

    Network Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  5. HDU3887 Counting Offspring [2017年6月计划 树上问题03]

    Counting Offspring Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  6. 洛谷P2912 [USACO08OCT]牧场散步Pasture Walking [2017年7月计划 树上问题 01]

    P2912 [USACO08OCT]牧场散步Pasture Walking 题目描述 The N cows (2 <= N <= 1,000) conveniently numbered ...

  7. Contest 20140923 潛行世界 拓撲排序,期望

    潜行世界 查看 提交 统计 提问 总时间限制:  10000ms 内存限制:  256000kB 描述 HJA和学弟还在旅游中,这次他们来到了潜行世界.潜行世界是一个N个点M条边的有向无环图.每条路对 ...

  8. 洛谷P1368 均分纸牌(加强版) [2017年6月计划 数论14]

    P1368 均分纸牌(加强版) 题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,纸牌总数必为 N 的倍数.可以在任一堆上取1张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取 ...

  9. 洛谷P1621 集合 [2017年6月计划 数论13]

    P1621 集合 题目描述 现在给你一些连续的整数,它们是从A到B的整数.一开始每个整数都属于各自的集合,然后你需要进行一下的操作: 每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于P的公共 ...

随机推荐

  1. Linux下jvm、tomcat、mysql、log4j优化配置笔记[转]

    小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存 ...

  2. ACM 关于数据输入加速

    转载请注明出处:http://blog.csdn.net/a1dark 分析:我们都知道运行时间对我们来说很重要.有时候不惜用大量的内存去换取一点时间.有些人可能都比较关注这个问题.首先时间上:cin ...

  3. android之listView定位到指定行同时隐藏输入键盘

    帮别人该bug遇到的一个问题,记录下来. listView.setSelection(a); 这个方法可以让让你的listview定位到指定行 但是如果紧接着执行隐藏输入键盘的代码,则会有bug,这个 ...

  4. Migration of ASP.NET app from IIS6 to IIS7 (7.5)

    For many of us familiar problem. You developing applications under IIS6 and you're about to move the ...

  5. Bash判断文件是否存在

    #!/bin/bash if [ -f filename ]; then echo 'file exist' else echo 'file not exist' fi

  6. Task类(任务)

    任务表示应完成的某个单元的工作.这个单元的工作可以在单独的线程中运行,也可以以同步方式启动一个任务,这需要等待主调用线程.使用任务不仅可以获得一个抽象层,还可以对底层线程进行很多控制. 1.启动任务 ...

  7. vim 编辑器笔记

    vim 编辑器 命令模式(默认),尾行模式 : / 两种方式 (Esc比较慢,连续连词esc,删除全部尾行内容),编辑模式 a,i,o,s :q 退出编辑不保存 :wq 保存编辑并退出 :w 保存并写 ...

  8. sharepoint中的YesNo字段

    sharepoint中的YesNo字段实际上是一个Boolean字段,性格有点特别,如果IsShow是一个YesNo字段,使用caml查询的时候值为”1“(Yes)”0“(No),Item[IsSho ...

  9. 一个误解: 单个服务器程序可承受最大连接数“理论”上是“65535”

    转载:http://www.cnblogs.com/tianzhiliang/archive/2011/06/13/2079564.html 请注意,这里有两个词分别被我标记上了引号,一个是" ...

  10. SQL 2012的分页

    今天看到一篇文章介绍2012中的分页,就想测试一下新的分页方法比原先的有多少性能的提升,下面是我的测试过程(2012的分页语法这里不在做多的说明,MSDN上一搜就有): 首先我们来构造测试数据: -- ...