poj2417大步小步法

2023-12-24 18:32
文章标签 步法 大步 poj2417

本文主要是介绍poj2417大步小步法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当n是素数时

a^x≡b (mod n)

令x=im+j,m=ceil(sqrt(n))   0<=i,j<m

a^j≡b*(a^(-m))^i    mod(n)

用hash表存储a^0,a^1……a^(m-1),枚举i,找是否存在对应的j,存在即有解

n 不是素数之所以不成立是因为 ( a,n )!=1 导致逆元不存在。

a^x-kn=b;

当n不是素数时,设gcd=gcd(a,n),若gcd不能整除b,则无解

否则两端同时除以gcd,重复此步骤

#include<string.h>
#include<stdio.h>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct node{int num;long long val;
}a[1000000];
bool cmp(node x,node y){return x.val==y.val?x.num<y.num:x.val<y.val;
}
int mod,m,cnt;
int pow_mod(int a,int b){long long t=a,res=1;while(b){if(b&1) res=res*t%mod;t=t*t%mod;b>>=1;}return res;
}
int find(int n){int l=0,r=cnt,mid;while(r>l+1){mid=(l+r)>>1;if(a[mid].val<=n) l=mid;else r=mid;}if(a[l].val==n) return a[l].num;else return -1;
}
int main(){int p,b;long long n;while(scanf("%d%d%I64d",&p,&b,&n)!=EOF){if(n==1){printf("0\n");continue;}mod=p;m=ceil(sqrt(1.0*p));int ni=pow_mod(pow_mod(b,p-2),m);a[0].val=1; a[0].num=0;for(int j=1;j<m;j++){a[j].val=a[j-1].val*b%p;a[j].num=j;}sort(a,a+m,cmp);cnt=1;for(int j=1;j<m;j++){if(a[j].val!=a[cnt-1].val){a[cnt++]=a[j];}}int i,j=-1;for(i=0;i<=m;i++){j=find(n);if(j!=-1) break;n=n*ni%p;}if(j==-1){printf("no solution\n");continue;}long long ans=i*m+j;printf("%I64d\n",ans);}
}


这篇关于poj2417大步小步法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532733

相关文章

【R语言入门】开启R的会话并大步向前!

R语言入门 – 开启R的会话并大步向前! R Programming Essentials – Launch R Session and Go Forward! By Jackson@ML 名言引述 There are only two kinds of languages: the ones people complain about and the ones nobody uses.

POJ2417 Discrete Logging【高次同余方程】

题目链接: http://poj.org/problem?id=2417 题目大意: 已知整数P、B、N满足公式B^i = N(mod P),求i的值是多少。 思路: 典型的解高次同余方程A^x = B(mod C),直接套模板解决。注意输入顺序:C A B AC代码: #include<iostream>#include<algorithm>#inclu

python打包,setuptools打包6步法

引言:为什么要学习Python模块打包与分发 在Python的世界里,模块化开发是提高代码复用性和协作效率的关键。当你精心打造了一个功能完备、设计优雅的模块,自然希望它不仅能服务于当前项目,还能在其他场景中大放异彩。这时,打包与分发你的模块就显得尤为重要。通过打包,你可以将模块整理成符合标准的文件结构,方便他人安装和使用。而分发,则能让全世界的Python开发者在PyPI(Python Pack

搜索的几大步

题意 问题 限制条件 实列 搜索状态树: 状态存储 搜索方式 剪枝 题目类型

AI家居设备的未来:智能家庭的下一个大步

🔒目录          ☂️智能家居设备的发展和AI技术的作用          ❤️AI技术实现智能家居设备的自动化控制和智能化交互的依赖          AI家居设备的未来应用场景          💣智能家庭在未来的发展和应用前景  💥智能家居设备的发展和AI技术的作用 智能家居设备的发展和AI技术的作用是智能化家庭生活的重要组成部分。随着科技的不断进步,

SEO优化6月新步法!三点让你领悟

我们在一起培训人聊起昨日是你儿子的节日,今天是你的节日,这个是个玩笑下面我们来谈谈优化是一项漫长的工作,在整个优化的过程中会遇到各种各样的问题,尤其在标题优化的过程中,更应该学会避免一些优化的误区,掌握一定的优化技巧,那么在标题优化的过程中有哪些技巧? 优化给你分享三大点重要事项。您所在的公司名称,不止能够将你的结果列表与竞争对手区分开来,与此同时还能够帮助您的网站带来更多的点击率,有效帮助您提

数字化创业实践:专业技能演化为教育产品的五步法

数字时代的创业者们,不再满足于传统商业模式,转而挖掘在线教育这块处女地。若你掌握了炙手可热的专业技能,便已站在成功的门槛上。让我们一起探索如何实践创业计划,将专业技能华丽转身,成为市场上抢手的教育产品。 ### 1. 确定你的教育创业愿景 🌟 - 确认目标群体:准确定位你所面向的学员类型,构建他们的学习需求画像。 - 构思独特卖点:找准你的教学和课程与众不同之处,是技术深度?授课风格?还是实

【管理】推进五步法

推进五步法是一种常用的解决问题和推动工作的方法,通常用于团队协作、项目管理和决策过程中。这五个步骤是: 明确目标:首先确定工作的具体目标或问题的解决方向。目标应该具体、明确、可量化,并与团队共享。 分析现状:对当前情况进行分析,了解问题的根源、障碍和挑战,以及资源、限制条件等因素。这有助于制定有效的解决方案。 制定计划:基于目标和现状分析,制定详细的行动计划,确定实现目标的具体步骤、时间表

钉钉“牵手”微信,互联网“拆墙”大步迈进

随着流量红利逐渐消退,各互联网大厂之间的竞争也进一步加剧,在此背景下,大厂们越来越认识到,单打独斗不是长久之策,强强联合、资源整合才能在竞争中扬长避短,扩大优势。于是,阿里、腾讯等互联网大厂也不再局限于“圈地运动”的竞逐,而是纷纷开始寻求合作。 事实上,各互联网大厂“互联互通”的故事在近两年内时有发生,“BAT”等互联网巨头除了一直在加强与抖音、B站、小红书等新晋独角兽的合作之外,它们彼此之间也

项目管理实战10步法——索尼爱立信培训记

12月14-15日,常老师应邀到索尼爱立信公司做《项目管理实战10步伐》培训,参训人员共30多人,分别来自索爱的测试和质控部门。项目管理实战10步法是一门项目管理理论和实战的课程,其特点是可以让学员选择自己公司和自己身边的案例,然后跟着老师通过10个步骤完整模拟项目管理从启动、计划、执行、控制到收尾的全部过程,本次培训索爱学员选择了自己的三个案例,一个是手机产品研发的案例,一个是质量改善的案例,还