LuoguP4861 按钮
传送门
这题一眼看上去要解\(k^x \equiv 1(mod\ m)\)的最小正整数解。
于是我打了一个扩展BSGS
这题这样做算的答案一直是0的。不过有另一个定理欧拉定理,\(k^{\varphi(m)} \equiv 1 (mod\ m)\)。
首先我们要保证\(gcd(k,m) = 1\),如果不互质的话那就是无解的。
因为有这样一句话:\(k^x mod\ m\)的结果必然是\(gcd(k,m)\)的倍数。我有一些奇怪的理解方法。因为其实这两者都可以看成是\(gcd(k,m)\)的t倍和\(gcd(k,m)\)的p倍。两个\(gcd(k,m)\)的正整数倍互相取模,那答案一定是\(gcd(k,m)\)的倍数了。
于是我们把\(\varphi(m)\)算了出来。但是这不一定是最小的解。
我们可以证明最小的解必然是\(\varphi(m)\)的一个因子。反证法如下:
假设\(n \nmid \varphi(m)\),且n是满足\(k^x \equiv 1 (mod\ m)\)的最小正整数。那么因为\(n \nmid \varphi(m)\),我们可以假设\(pn < \varphi(m) < p(n+1)\),那么就有\(k^{\varphi(m)-pn} \equiv 1 (mod \ m)\),所以n并不是最小正整数解。
所以我们枚举\(\varphi(m)\) 的因子,符合条件且最小的就是答案。
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
#define enter putchar('\n')
#define fr friend inline
#define y1 poj
#define mp make_pair
#define pr pair<int,int>
#define fi first
#define sc second
#define pb push_back
using namespace std;
typedef long long ll;
const int M = 500005;
const int mod = 999979;
const int INF = 1000000009;
const double eps = 1e-7;
int read()
{
int ans = 0,op = 1;char ch = getchar();
while(ch < '0' || ch > '9') {if(ch == '-') op = -1;ch = getchar();}
while(ch >= '0' && ch <= '9') ans = ans * 10 + ch - '0',ch = getchar();
return ans * op;
}
int k,m,p[M],tot,cnt,ans[M];
bool np[M];
int gcd(int a,int b){return (!b)? a : gcd(b,a%b);}
int mul(int a,int b,int t){return 1ll * a * b % t;}
int qpow(int a,int b,int t)
{
int p = 1;
while(b)
{
if(b & 1) p = mul(p,a,t);
a = mul(a,a,t),b >>= 1;
}
return p;
}
void euler()
{
rep(i,2,M-2)
{
if(!np[i]) p[++tot] = i;
for(int j = 1;i * p[j] <= M-2;j++)
{
np[i * p[j]] = 1;
if(!(i % p[j])) break;
}
}
}
/*
int phi(int x)
{
int res = 1;
rep(i,1,tot)
{
bool flag = 1;
while(!(x % p[i]))
{
x /= p[i];
if(flag) res *= (p[i] - 1),flag = 0;
else res *= p[i];
}
}
if(x > 1) res *= (x-1);
return res;
}
*/
int phi(int x)
{
int res = x;
rep(i,2,sqrt(x)) if(!(x % i)){res = res / i * (i-1);while(!(x%i)) x /= i;}
if(x > 1) res = res / x * (x-1);
return res;
}
int main()
{
euler();
m = read(),k = read();
if(gcd(m,k) != 1) printf("Let's go Blue Jays!\n");
else
{
int g = phi(m);
rep(i,1,sqrt(g))
{
if(qpow(k,i,m) == 1) ans[++cnt] = i;
if(qpow(k,g/i,m) == 1) ans[++cnt] = g / i;
}
sort(ans+1,ans+1+cnt);
printf("%d\n",ans[1]);
}
return 0;
}
LuoguP4861 按钮的更多相关文章
- ExtJS 4.2 Date组件扩展:添加清除按钮
ExtJS中除了提供丰富的组件外,我们还可以扩展他的组件. 在这里,我们将在Date日期组件上添加一个[清除]按钮,用于此组件已选中值的清除. 目录 1. Date组件介绍 2. 主要代码说明 3. ...
- 关于Android避免按钮重复点击事件
最近测试人员测试我们的APP的时候,喜欢快速点击某个按钮,出现一个页面出现多次,测试人员能不能禁止这样.我自己点击了几下,确实存在这个问题,也感觉用户体验不太好.于是乎后来我搜了下加一个方法放在我们U ...
- Expression Blend创建自定义按钮
在 Expression Blend 中,我们可以在美工板上绘制形状.路径和控件,然后修改其外观和行为,从而直观地设计应用程序.Button按钮也是Expression Blend最常用的控件之一,在 ...
- 步入angularjs directive(指令)--点击按钮加入loading状态
今天我终于鼓起勇气写自己的博客了,激动与害怕并存,希望大家能多多批评指导,如果能够帮助大家,也希望大家点个赞!! 用angularjs 工作也有段时间了,总体感觉最有挑战性的还是指令,因为没有指令的a ...
- iOS 键盘添加完成按钮,delegate和block回调
这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...
- wordpress优化之结合prism.js为编辑器自定义按钮转化代码
原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...
- Android快乐贪吃蛇游戏实战项目开发教程-05虚拟方向键(四)四个三角形按钮
该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.如何判断点击的是哪个方向键按钮 在上篇教程中我们实现了左边的三角形按钮效果, ...
- Android快乐贪吃蛇游戏实战项目开发教程-04虚拟方向键(三)三角形按钮效果
该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.知识点讲解 当我们点击系统自带的按钮时,按钮的外观会发生变化.上篇博文中我们 ...
- mono for android Listview 里面按钮 view Button click 注册方法 并且传值给其他Activity 主要是context
需求:为Listview的Item里面的按钮Button添加一个事件,单击按钮时通过事件传值并跳转到新的页面. 环境:mono 效果: 布局代码 主布局 <?xml version=" ...
随机推荐
- linux下命令行的查找顺序
由下可知,linux通过$PATH的路径顺序,由左至由依次查找某个程序,如果有两个路径下都有这个程序,以先找到的为准 [rpc_server]$ which 23/usr/bin/which: no ...
- sdut 面向对象程序设计上机练习九(对象指针)
面向对象程序设计上机练习九(对象指针) Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 建立对象数组,内放5个学生数据(学号是字符串类型.成绩是整型).设 ...
- mac异常删除管理员账户恢复操作
重新启动电脑,同时按下command+s键进入命令行方式 待系统加载完成后顺序输入以下命令: /sbin/mount -uaw rm var/db/.applesetupdone reboot 待系统 ...
- 使用cacheBuilder实现函数防抖
在接口中出现的相同请求重复且连续发送的情况导致一些业务BUG,需要在接口上实现防抖 使用google的cacheBuilder import com.google.common.cache.Cache ...
- Flash如何为文字描边
可以使用墨水瓶工具,但是要先把文字打散(可以打散之后再组合起来)粗细和颜色都可以调,粗细就是笔触,颜色就是前景色(边框颜色)
- Win7/Win2008下IIS配置Asp网站启用父路径的设置方法(已解决)
Win7/Win2008下IIS配置Asp网站启用父路径的设置方法(已解决) 在Win7/Win2008下IIS配置Asp网站启用父路径的设置方法与win2003下不同,看看下图就知道了.
- 小数运算需要注意什么? 接口和抽象类 WinForm窗体上两个panel,怎么实现一个panel固定漂浮在另一个panel之上
小数运算需要注意什么? 1. 生活中0.1+0.2=0.3, 计算机中可不是这样,为什么呢? 大家都知道计算机类型都是有数据范围的.整形int范围是 正负21亿左右,小数类型同样也是有范围的,但是即使 ...
- 用redis实现跨服务器session(转)
这个月我们新开发了一个项目,由于使用到了4台机器做web,使用dns做负载均衡, 上面图上用户通过DNS的调度(一个域名对应多个ip)分别访问到VM2-VM5上,四台机器都访问VM1上的redis,两 ...
- docker--caffe
Running an official image You can run one of the automatic builds. E.g. for the CPU version: docker ...
- stringByAppendingPathComponent和stringByAppendingString 的区别
stringByAppendingPathComponent和stringByAppendingString 的区别 stringByAppendingPathComponent NSString ...