重排DL
题解:
https://www.luogu.org/problemnew/show/T51442
从这题上还是学到不少东西。。
以前并没有写过ex-bsgs
正好拿这个复习中国剩余定理和bsgs了(我觉得noip肯定不考这东西)
看过一篇博客说把乘法变除法避免逆元操作
然后我就这么写了 对拍一下会发现是错的
为什么呢
$ a^b=k*a^c\ (\ mod\ m) $ 并不能推导出
$ a^{b-c}=k \ (\ mod\ m) $
只有当m和a互素才成立
所以还是得ex-bsgs
至于ex-bsgs详见xxy https://www.cnblogs.com/TheRoadToTheGold/p/8478697.html
写的很详细了
另外这题还卡常数啊
传统的快速乘并不行
有一种叫做O(1)快速乘的东西
LL modmul(LL A,LL B,LL mod)
{
return (A*B-(LL)((long double)A*B/mod)*mod+mod)%mod;
}
于是我决定明天重新写一下这题。。
代码:
// luogu-judger-enable-o2
#include <bits/stdc++.h>
using namespace std;
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;++i)
#define dep(i,t,h) for (int i=t;i>=h;--i)
#define ll long long
map<ll,ll> M;
ll n,m,b;
IL ll cf(ll x,ll y)
{
ll t=(x*y-(ll)((long double)x*y/m)*m);
if (t<) return t+m; else return t;
}
ll gcd(ll x,ll y)
{
if (!y) return(x);
return gcd(y,x%y);
}
ll ksm(ll x,ll y)
{
if (!y) return();
if (y==) return(x);
ll ans=ksm(x,y/);
ans=cf(ans,ans);
if (y%==) ans=cf(ans,x);
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m>>b;
b=((b-n)%m+m)%m;
ll a1=((cf(,n)-)%m+m)%m;
ll tmp=;
ll ans=;
while ()
{
ll d=gcd(a1,m);
if (d==) break;
if (b%d)
{
cout<<"INF"<<endl;
exit();
}
b/=d; m/=d; ans++;
tmp=cf(tmp,a1/d);
if (tmp==b)
{
cout<<ans<<endl;
exit();
}
}
ll k=sqrt(m);
if (k*k<m) k++;
ll now=b;
rep(i,,k)
{
now=cf(now,a1);
M[now]=i;
}
now=tmp;
ll a2=ksm(a1,k);
rep(i,,k)
{
now=cf(now,a2);
if (M[now])
{
cout<<i*k-M[now]+ans<<endl;
exit();
}
}
cout<<"INF"<<endl;
return ;
}
重排DL的更多相关文章
- 关于DOM的操作以及性能优化问题-重绘重排
写在前面: 大家都知道DOM的操作很昂贵. 然后贵在什么地方呢? 一.访问DOM元素 二.修改DOM引起的重绘重排 一.访问DOM 像书上的比喻:把DOM和JavaScript(这里指ECMScri ...
- DIV+CSS中标签dl dt dd常用的用法
转自:http://smallpig301.blog.163.com/blog/static/9986093201010262499229/ < dl>< /dl>用来创建一个 ...
- [CUDA] CUDA to DL
又是一枚祖国的骚年,阅览做做笔记:http://www.cnblogs.com/neopenx/p/4643705.html 这里只是一些基础知识.帮助理解DL tool的实现. “这也是深度学习带来 ...
- 深度学习 - DL
雷锋网 - 2016 | 人工智能在深度学习领域的前世今生(原文链接) Deep Learning - DL,深度学习是机器学习的一种. 深度学习最重要的作用:表示学习 深度学习实践的四个关键要素 计 ...
- JVM内存模型、指令重排、内存屏障概念解析
在高并发模型中,无是面对物理机SMP系统模型,还是面对像JVM的虚拟机多线程并发内存模型,指令重排(编译器.运行时)和内存屏障都是非常重要的概念,因此,搞清楚这些概念和原理很重要.否则,你很难搞清楚哪 ...
- 如何删除PHP数组中的元素,并且索引重排(unset,array_splice)?
如果要在某个数组中删除一个元素,可以直接用的unset,但是数组的索引不会重排: <?php $arr = array('a','b','c','d'); unset($arr[1]); pri ...
- [DL学习笔记]从人工神经网络到卷积神经网络_2_卷积神经网络
先一层一层的说卷积神经网络是啥: 1:卷积层,特征提取 我们输入这样一幅图片(28*28): 如果用传统神经网络,下一层的每个神经元将连接到输入图片的每一个像素上去,但是在卷积神经网络中,我们只把输入 ...
- 动态加载框架DL分析
动态加载框架DL分析 插件化开发,主要解决三个问题1.动态加载未安装的apk,dex,jar等文件2.activity生命周期的问题,还有service3.Android的资源调用的问题 简单说一下怎 ...
- 一篇讲Java指令重排和内存可见性的好文
在这里: http://tech.meituan.com/java-memory-reordering.html 指令重排和内存可见性(缓存不一致)是两个不同的问题. volatile关键字太强,即阻 ...
随机推荐
- K-query SPOJ - KQUERY 离线 线段树/树状数组 区间大于K的个数
题意: 给一个数列,一些询问,问你区间$[l.r]$大于$K$的个数 题解: 又一个"人尽皆知傻逼题"? 我们用一个01序列表示当前询问时,该位置的数字是否对答案有贡献, 显然,对 ...
- mysql查询sending data占用大量时间的问题处理
问题描述:某条sql语句在测试环境执行只需要1秒不到,到了生产环境执行需要8秒以上 在phpmyadmin里面执行性能分析,发现sending data占用了差不多90%以上的时间 查询一下“Send ...
- 文件缓存tmpfs简单使用
文件缓存tmpfs基于内存的文件系统,直接使用ram(物理内存)+swap(交换分区) tmpfs缓存文件系统/dev/shm共享内存动态的使用虚拟内存,文件删除后释放内存 特性:1.动态空间使用和动 ...
- virtual box 安装centos min
2018-4-19 22:20:40 星期四 之前不小心把用了很久的centos镜像删掉了.....这里记录下安装最小版centos的步骤 1. 安装centos 2. 开启网络, 并设置为随机启动 ...
- C++ DLL
DLL(Dynamic Link Library)(1)DLL 的编制与具体的编程语言及编译器无关只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用.譬如Windows提供的 ...
- css清除浏览器默认样式
css清除浏览器默认样式(代替 *{}) 将代码放入 css 文件,使用 link 引入. /* v2.0 | 20110126 http://meyerweb.com/eric/tools/css/ ...
- noj算法 装载问题 回溯法
描述: 有两艘船,载重量分别是c1. c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2.确定是否有可能将所有集装箱全部装入两艘船. 输入: 多个测例,每个测例的输入占 ...
- HttpListener通讯成功案例
1.创建WindowsService,如下代码 using System;using System.Net;using System.Net.Sockets;using System.ServiceP ...
- Confluence 6 布局高级自定义
重载 Velocity 模板 velocity 目录是 Confluence Velocity 模板文件进行搜索时候需要的文件夹.例如,你可以通过将你的 Velocity 文件使用正确的文件名放置到正 ...
- 简化版的AXI-LITE4和配合使用的RTL
////////////////////////////////////////////////////////////////////////////////// // // The ZYNQ FI ...