重排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关键字太强,即阻 ...
随机推荐
- 设计模式C++学习笔记之五(Factory Method工厂方法模式)
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的 ...
- hibernate框架学习之多表查询helloworld
package cn.itcast.h3.hql; import java.util.List; import org.hibernate.Query; import org.hibernate.Se ...
- 打造一个上传图片到图床利器的插件(Mac版 开源)
写markdown博客如何将截图快速上传到图床--记一个工具插件的实现(windows版 开源)(2017-05-31 20:23) 打造一个上传图片到图床利器的插件 鉴于写博客截图手动上传到图床的步 ...
- SIOCGMIIPHY 和 SIOCSMIIREG 命令
使用ioctl命令时,可以看到上述两个命令的存在, 在头文件 include/linux/sockios.h,定义如下: #define SIOCETHTOOL 0x8946 /* ...
- UVA 11796
题意: 有两个狗, 按照 多边形跑,不知道两条狗的速度,但是狗是同时出发,同时到达终点的 输出两条狗的 最大相距距离 - 最小相距距离: 思路 : 用物理的相对运动来计算, 每次只计算 两条狗的直线 ...
- python 基础 01
什么是计算机? cpu: 计算机的大脑; 读写速度 3GHZ 内存: (为了提高利用率) 缓冲硬盘和cpu 硬盘: 机械硬盘读写速度70mb/s 计算机里面读写的内容都是01代码 二进制(计算机只认二 ...
- Go语言环境安装&搭建(Win)
Go语言简介 什么是Go语言 Go语言是谷歌2009发布的第二款开源编程语言. Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持 ...
- CSS margin合并
外边距合并 块的顶部外边距和底部外边距有时被组合(折叠)为单个外边距,其大小是组合到其中的最大外边距 发生外边距合并的三种基本情况 1. 相邻的兄弟姐妹元素 <div id="marg ...
- 弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
自从 2011 年发布以来,Kotlin 凭借强大的功能在开发者中的欢迎程度与日俱增.且在一年前,Google 宣布 Kotlin 正式成为 Android 官方开发语言,由此引发了从 Java 迁移 ...
- Confluence 6 跟踪你安装中的自定义修改
在 Confluence 中的系统信息(System Information)部分,有一个 修改(Modification)的选项.在这个选项中列出了自你 Confluence 安装以来,你 Conf ...