51nod 1256乘法逆元(含费马小定理的解释及证明)

2023-12-25 23:20

本文主要是介绍51nod 1256乘法逆元(含费马小定理的解释及证明),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解释及证明:

http://blog.sina.com.cn/s/blog_668e6e9d0101cygn.html 


51nod 1256:

1256 乘法逆元

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

 收藏

 关注

给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。

Input

输入2个数M, N中间用空格分隔(1 <= M < N <= 10^9)

Output

输出一个数K,满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。

Input示例

2 3

Output示例

2

快速幂:

#include<cstdio>
#include<cstring>
int phi;
long long int mod;
long long int poww(long long int a)
{int b=phi-1;long long ans=1;while(b) {if(b&1) ans=ans*a%mod;b=b>>1;a=a*a%mod;}return ans;
}
int getphi(int x)
{int sum=x;for(int i=2;i*i<=x;i++){if(x%i==0){sum=sum/i*(i-1);while(x%i==0) x/=i;}}if(x>1) sum=sum/x*(x-1);return sum;
}
int main()
{long long int a;scanf("%lld %lld",&a,&mod);   phi=getphi(mod);long long  ans=poww(a);printf("%lld",ans);return 0;
}

exgcd:

#include <stdio.h>
#include <stdlib.h>
#define ll long long
ll e_gcd(ll a,ll b,ll &x,ll &y)
{ll ans,p;if(b==0){x=1,y=0;return a;}ans=e_gcd(b,a%b,x,y);p=x;x=y;y=p-a/b*y;return ans;
}
int main()
{long long m,n,c,d,e,q;while(scanf("%lld %lld",&m,&n)!=EOF){c=e_gcd(m,n,d,e);q=(d%n+n)%n;printf("%lld\n",q);}return 0;
}

 

#include<cstdio>
void gcd(int a,int b,int &x,int &y)
{if(b==0){x=1;y=0;return;}gcd(b,a%b,y,x); //不明处y=y-a/b*x; //不明处
}
int main()
{int m,n,x,y;scanf("%d%d",&m,&n);gcd(m,n,x,y);printf("%d\n",(x%n+n)%n);
}

对于不明处的理解:

可以找到x,y,使得ax + by=c成立;

//这部分相当于依着gcd(b,a%b,y,x)

如果找到x',y',使得下面的等式成立

by'+(a%b)x'=c   

也就是

by'+(a-a/b*b)x'=c  

也就是

ax'+b(y'-[a/b]x')=c

所以

x=x',y=y'-[a/b]x'

可以得到x与x'是相等的,只需改变y  ----对应的就是代码中y=y-a/b*x;

 

 

 

 

这篇关于51nod 1256乘法逆元(含费马小定理的解释及证明)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

hdu4828(卡特兰数+逆元)

这题的前几个数据分别为1,2,5,14,32......................然后确定这是个卡特兰数列 下面来介绍下卡特兰数,它的递推式为f[i+1] = f[i]*(4*n - 6)/n,其中f[2] = f[3] =1;f[4] = 2;f[5] = 14;f[6] = 32.................................. 但是这题的n太大了,所以要用到逆元,

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

hdu4869(逆元+求组合数)

//输入n,m,n表示翻牌的次数,m表示牌的数目,求经过n次操作后共有几种状态#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#includ

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

嵌入式技术的核心技术有哪些?请详细列举并解释每项技术的主要功能和应用场景。

嵌入式技术的核心技术包括处理器技术、IC技术和设计/验证技术。 1. 处理器技术    通用处理器:这类处理器适用于不同类型的应用,其主要特征是存储程序和通用的数据路径,使其能够处理各种计算任务。例如,在智能家居中,通用处理器可以用于控制和管理家庭设备,如灯光、空调和安全系统。    单用途处理器:这些处理器执行特定程序,如JPEG编解码器,专门用于视频信息的压缩或解压。在数字相机中,单用途

请解释Java Web应用中的前后端分离是什么?它有哪些好处?什么是Java Web中的Servlet过滤器?它有什么作用?

请解释Java Web应用中的前后端分离是什么?它有哪些好处? Java Web应用中的前后端分离 在Java Web应用中,前后端分离是一种开发模式,它将传统Web开发中紧密耦合的前端(用户界面)和后端(服务器端逻辑)代码进行分离,使得它们能够独立开发、测试、部署和维护。在这种模式下,前端通常通过HTTP请求与后端进行数据交换,后端则负责业务逻辑处理、数据库交互以及向前端提供RESTful

OpenStack:Glance共享与上传、Nova操作选项解释、Cinder操作技巧

目录 Glance member task Nova lock shelve rescue Cinder manage local-attach transfer backup-export 总结 原作者:int32bit,参考内容 从2013年开始折腾OpenStack也有好几年的时间了。在使用过程中,我发现有很多很有用的操作,但是却很少被提及。这里我暂不直接

OpenStack实例操作选项解释:启动和停止instance实例

关于启动和停止OpenStack实例 如果你想要启动和停止OpenStack实例时,有四种方法可以考虑。 管理员可以暂停、挂起、搁置、停止OpenStack 的计算实例。但是这些方法之间有什么不同之处? 目录 关于启动和停止OpenStack实例1.暂停和取消暂停实例2.挂起和恢复实例3.搁置(废弃)实例和取消废弃实例4.停止(删除)实例 1.暂停和取消暂停实例

Zuul详细解释

Zuul 是 Netflix 开源的 API 网关,广泛用于微服务架构中。它作为系统的前置网关,主要功能包括路由、负载均衡、限流、安全性管理等。Zuul 最常见的应用场景是作为反向代理,它接收所有来自客户端的请求,并将请求转发给后端的微服务,从而屏蔽了微服务的复杂性。Spring Cloud 集成了 Zuul,使其成为 Spring Cloud 微服务生态系统中的一个重要组件。 为什么使用 Zu