#扩展欧几里得算法,快速乘#洛谷 4777 poj 2891 【模板】扩展中国剩余定理

本文主要是介绍#扩展欧几里得算法,快速乘#洛谷 4777 poj 2891 【模板】扩展中国剩余定理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

给定 n n n组非负整数 a i , b i a_i, b_i ai,bi,求解关于 x x x的方程组
x ≡ b 1 ( m o d    a 1 ) x\equiv b_1(\mod a_1) xb1(moda1)
x ≡ b 2 ( m o d    a 2 ) x\equiv b_2(\mod a_2) xb2(moda2) ⋯ \cdots
x ≡ b n ( m o d    a n ) x\equiv b_n(\mod a_n) xbn(modan)
的最小非负整数解


分析

虽然题目好像是中国剩余定理,但是 a a a数组不满足互质,必然是需要其它的方法,那么就可以用扩欧,跑n遍,因为要求最小,所以需要求最小公倍数,然后其实就没什么了


代码

#include <cstdio>
#define rr register
typedef long long ll;
ll in(){ll ans=0; char c=getchar();while (c<48||c>57) c=getchar();while (c>47&&c<58) ans=(ans<<3)+(ans<<1)+c-48,c=getchar();return ans;
}
void print(ll ans){if (ans>9) print(ans/10);putchar(ans%10+48);
}
ll exgcd(ll a,ll b,ll &x,ll &y){//扩欧if (!b) {x=1; y=0; return a;}else{rr ll d=exgcd(b,a%b,y,x);y-=a/b*x; return d;}
}
ll ksm(ll x,ll y,ll mod){//快速乘ll ans=0;while (y){if (y&1) ans=(ans+x)%mod;x=(x+x)%mod; y>>=1;}return ans;
}
int main(){rr int n;while (scanf("%d",&n)==1){rr ll a=in(),ans=in(); rr bool flag=1;while (--n){rr ll b=in(),c=in();if (!flag) continue;c=(c-ans%b+b)%b; rr ll x,y,mod;//求出新的答案rr ll d=exgcd(a,b,x,y); mod=b/d;//扩欧if (c%d) {flag=0; continue;}//不可能x=ksm(x,c/d,mod);//快速乘ans+=x*a; a*=mod; ans=(ans%a+a)%a;//求最小非负整数解}if (!flag) putchar('-'),putchar(49);else if (ans) print(ans); else putchar(48); putchar(10);}
}

这篇关于#扩展欧几里得算法,快速乘#洛谷 4777 poj 2891 【模板】扩展中国剩余定理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

C++快速排序超详细讲解

《C++快速排序超详细讲解》快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下... 目录一、快速排序原理二、快速排序标准代码三、代码解析四、使用while循环的快速排序1.代码代码1.由快