重排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#进行AUTOCAD的二次开发
众所周知,对AutoCAD进行二次开发用到的主要工具有:ObjectArx,VBA,VLisp.但它们的优缺点是显而易见的:ObjectArx功能强大,编程效率高,但它的缺点是编程者必须掌握VC++, ...
- C++ 三/五法则
当定义一个类时,我们显式地或隐式地指定了此类型的对象在拷贝.赋值和销毁时做什么.一个类通过定义三种特殊的成员函数来控制这些操作:拷贝构造函数.拷贝赋值运算符和析构函数. 拷贝构造函数定义了当用同类型的 ...
- Mac下更改JDK环境变量配置
1.打开终端 2.如果你是第一次配置环境变量,可以使用“touch .bash_profile” 创建一个.bash_profile的隐藏配置文件(如果你是为编辑已存在的配置文件,则使用"o ...
- SIOCGMIIPHY 和 SIOCSMIIREG 命令
使用ioctl命令时,可以看到上述两个命令的存在, 在头文件 include/linux/sockios.h,定义如下: #define SIOCETHTOOL 0x8946 /* ...
- 通过python脚本获取服务器硬件信息
#!/usr/bin/python # coding:utf-8 """ 采集机器自身信息 1 主机名 2 内存 3 ip与mac地址 4 cpu信息 5 硬盘分区信息 ...
- [C]控制外部变量访问权限的extern和static关键字
一.extern 概述 编译器是由上至下编译源文件的,当遇到一些函数引用外部全局变量,而这个变量被定义在该函数声明主体的下方,又或者引用自其它的编译单元,这个情况就需要extern来向编译器表明此变量 ...
- mybatis 按in 函数参数顺序排序
使用 FIELD()函数 SELECT * FROM user WHERE id IN (72, 80, 69) ORDER BY FIELD(id, 72, 80, 69)
- mongodb 数据库中 的聚合操作
- vuex action 与mutations 的区别
面试没说清楚.这个太丢人回来整理下: 事实上在 vuex 里面 actions 只是一个架构性的概念,并不是必须的,说到底只是一个函数,你在里面想干嘛都可以,只要最后触发 mutation 就行.异步 ...
- bzoj 2190
题意:求 题解:这题...数据范围是真小... 研究一下这一表达式,发现gcd(i,j)=1表示i,j互质,那么互质肯定能想到欧拉函数,可是欧拉函数要求j<i,那么我们变化一下:显然原矩阵是对称 ...