第六章 数学问题 -------- 6.11【同余方程组】POJ1006 生理周期

同余方程组求解 第一种:模为互质的 问题: 一堆物品 3个3个分剩2个 5个5个分剩3个 7个7个分剩2个 问这个物品有多少个 需要构造一个答案 假设 5*7*a%3=1 3*7*b%5=1 3*5*c%7=1 乘上剩余个数 2*5*7*a%3=2 3*3*7*b%5=3 2*3*5*c%7=2 那么X=2*5*7*a+3*3*7*b+2*3*5*c,即为所求。 再求个lcm 阅读详情

同余方程组:

  先来看一道题目:有物不知其数,三三数之剩二;五五数之剩三;七七数之剩二。问物几何?  然后我们可以做如下变换,设x为所求的数。

   x%3=2              x ≡ a1(%m1)  ①
   x%5=3  ===>  x ≡ a2(%m2)  ②
   x%7=2              x ≡ a3(%m3)

  根据前面两式可以得到  

    x = a1+m1y1     (1) 
   x = a2+m2y2

  两式相减得到  m1y1 - m2y2 = a2 - a1  这是一个线性不定方程,可解出y1  ---> linearEquation(m1,-m2,a2-a1)   带回(1),得特解x0 = a1+m1*y1 --> 得到通解表达式 x =x0 + k*lcm(m1,m2) 得一个新方程 x = x0 (mod lcm(m1,m2))

  代码:

/**
 * 
 * @param a 余数组成的数组
 * @param m 模组成的数组
 * @return
 * @throws Exception
 */
public static long linearEquationGroup(Long[] a, Long[] m) throws Exception {
  int len = a.length;
  if (len == 0 && a[0] == 0)
    return m[0];

  for (int i = 1; i < len; i++) {
    // 这里往前看是两个方程
    long a2_a1 = a[i] - a[i - 1];
    long d = linearEquation(m[i - 1], -m[i], a2_a1);
    // 现在的x是y1,用y1求得一个特解
    long x0 = a[i - 1] + m[i - 1] * x;
    long lcm = m[i - 1] * m[i] / d;
    a[i] = (x0 % lcm + lcm) % lcm;// x0变成正数
    m[i] = lcm;
  }
  // 合并完之后,只有一个方程 : x = a[len-1] (% m[len-1])
  //long d = linearEquation(1, m[len-1], a[len-1]);
  return a[len - 1] % m[len - 1];
}

 题目:POJ1006 生理周期

  代码:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class POJ1006 {

    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        int t = 1;
        List<Long[]> aList = new ArrayList<Long[]>();
        List<Long> dList = new ArrayList<Long>();
        while(scanner.hasNext()){
            Long []a = {scanner.nextLong(),scanner.nextLong(),scanner.nextLong()};
            Long d = scanner.nextLong();
            if (a[0]==-1&&a[1]==-1&&a[2]==-1&&d==-1) {
                break;
            }else {
                aList.add(a);
                dList.add(d);
            }
        }
        for (int i = 0; i < aList.size(); i++) {
            Long[] a = aList.get(i);
            long d = dList.get(i);
            Long[] m = { (long) 23, (long) 28, (long) 33 };
            long res = MyGcd.linearEquationGroup(a, m);
            while (res <= d) {
                res += 21252;
            }
            System.out.println("Case " + (t++) + ": the next triple peak occurs in " + (res - d) + " days.");
        }
    }
    
    private static class MyGcd {
        static long x;
        static long y;

        /**
         * 
         * @param a 余数组成的数组
         * @param m 模组成的数组
         * @return
         * @throws Exception
         */
        public static long linearEquationGroup(Long[] a, Long[] m) throws Exception {
            int len = a.length;
            if (len == 0 && a[0] == 0)
                return m[0];

            for (int i = 1; i < len; i++) {
                // 这里往前看是两个方程
                long a2_a1 = a[i] - a[i - 1];
                long d = linearEquation(m[i - 1], -m[i], a2_a1);
                // 现在的x是y1,用y1求得一个特解
                long x0 = a[i - 1] + m[i - 1] * x;
                long lcm = m[i - 1] * m[i] / d;
                a[i] = (x0 % lcm + lcm) % lcm;// x0变成正数
                m[i] = lcm;
            }
            // 合并完之后,只有一个方程 : x = a[len-1] (% m[len-1])
            //long d = linearEquation(1, m[len-1], a[len-1]);
            return a[len - 1] % m[len - 1];
        }

        public static long inverseElement(long a, long mo) throws Exception {

            long d = linearEquation(a, mo, 1);
            x = (x % mo + mo) % mo;
            return d;
        }

        public static long linearEquation(long a, long b, long m) throws Exception {
            long d = ext_gcd(a, b);
            // m不是gcd(a,b)的倍数,这个方程无解
            if (m % d != 0)
                throw new Exception("无解");
            long n = m / d;// 约一下,考虑m是d的倍数
            x *= n;
            y *= n;
            return d;
        }

        public static long ext_gcd(long a, long b) {

            if (b == 0) {
                x = 1;
                y = 0;
                return a;
            }
            long res = ext_gcd(b, a % b);
            long x1 = x;// 备份x
            x = y;// 更新x
            y = x1 - a / b * y;// 更新y
            return res;
        }

    }

}

  结果:

时间门控拉曼进展 拉曼光谱就像是用光给分子拍“指纹照”,通过激光照射样品,散射光会揭示样品的分子结构。但问题来了,样品有时会发荧光,就像拍照时闪光灯太亮,把指纹照模糊了。时间门控拉曼光谱技术就像加了个“快门”,只在拉曼信号出现的那一瞬间开门,把慢吞吞的荧光挡在门外,这样就能拍到清晰的“指纹”。 阅读详情

相关推荐

2025ICPC南昌邀请赛题解

2025ICPC南昌邀请赛由XDU和WHU联合出题的ICPC南昌邀请赛,榜单显示8题金、6题银、5题铜。

weixin_50089904的博客 1960

枚举 生理周期

Description 人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给

weixin_46210443的博客 354

半导体AMHS天车振动控制:从0.5G到超低振动的技术演进与工程实战

在先进晶圆厂中,自动化物料搬运系统(AMHS)的天车如同空中出租车,承担着晶圆盒(FOUP)在洁净室各工艺区间的转运任务。然而,当天车加减速、过弯或抓取时产生的机械振动通过轨道梁和建筑结构传递至光刻机等敏感设备,便可能直接威胁套刻精度与良率。传统被动减振方案依靠橡胶垫和弹簧,在0.5G指标时代曾行之有效,但在EUV光刻和先进制程面前已力不从心。主动振动控制技术通过传感器、控制器与作动器构成的闭环系统,在轨道吊点和机械手端实时输出反向力抵消振动,配合磁悬浮走行、轻量化结构及调度系统的路径优化,将振动从0.5G

weixin_29188043的博客 345

【数论】同余(四):一元线性同余方程组(两两相消、中国剩余定理)

数论,同余部分,一元线性同余方程组,两两相消解法和中国剩余定理解法

default111的博客 1918

Apache Doris IP变更问题详解

Apache Doris IP变更问题详解

ith321的博客 7274

中国剩余定理—— 一次同余方程组解法

总结一次同余方程组的解法与推导过程。

zorchp 1万+

企业级智能问数开发的核心痛点与技术聚焦

本文介绍了企业级智能问数系统开发的三大核心问题和解决方案:语义解析不精准、SQL生成不健壮、企业适配难落地。文章从开发者视角出发,详细拆解了NLU语义解析、SQL生成、对话记忆、企业级适配四大核心模块的技术实现。 在技术选型方面,推荐了LangChain+DeepSeek-R1、FAISS/Milvus、SQLAlchemy等工具链组合。针对企业级需求,重点讲解了: 语义解析模块的意图识别优化和要素提取技术 SQL生成模块的语法校验与性能优化方案 对话记忆模块的Redis存储实现 企业级适配的三层防护体系和

lamehsl的专栏 1048

同余方程组有解定理及其证明

其实这个定理我也不知道叫什么名字,就自己起了个名字。 定理描述:设m1,m2为整数,m是m1,m2的最小公倍数,则同余方程组: x ≡ a1 (mod m1) x ≡ a2 (mod m2) 有解的充分必要条件是(m1,m2)|a1-a2,如果这个条件成立则方程组有且仅有一个小于m的非负整数解。 证明:设d = (m1,m2) 1.我们先来证明一下充分性。 ①.由同余方程组可得 x = km1 + a1,x = km2 + a2,所以a1 - a2 = km2 - km1。 ②.因为d | m1,d | m

吃醋不爱蘸饺子的胡诌乱造 5844

【Java核心高阶进阶】44-Java8核心新特性

模块十:Java新特性演进 · 第 1 篇Java 8 是 Java 语言历史上最重要的一次发布,它引入的函数式编程范式从根本上改变了 Java 的编码方式。即便到了 JDK 21 的今天,Lambda、Stream、Optional 仍是日常开发的高频工具。本篇将深入这些特性的语法、原理与底层机制,帮助你不仅会用,更知其所以然。

gaochufukanyongren的博客 24

RK3568笔记六十一:MIPI摄像头应用程序编写

V4L2设备驱动框架向应用层提供了一套统一、标准的接口规范,应用程序按照该接口规范来进行应用编程,从而使用摄像头。对于摄像头设备来说,其编程模式如下所示:1.首先是打开摄像头设备;2.查询设备的属性或功能;3.设置设备的参数,譬如像素格式、帧大小、帧率;4.申请帧缓冲、内存映射;5.帧缓冲入队;6.开启视频采集;7.帧缓冲出队、对采集的数据进行处理;8.处理完后,再次将帧缓冲入队,往复;9.结束采集。

1004

4、同余方程组

一、课程目标 同余方程组 中国剩余定理crt 扩展中国剩余定理excrt 二、目标详解 1、 同余方程组 “有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?” –《孙子算经》 问题:由多个同余方程组成,求解满足所有同余方程的x。 x ≡ a1 (mod m1) x ≡ a2 (mod m2) ... x ≡ an (mod m3) 如果mi两两互质,则可...

zhujiana的专栏 2021

UE4打包为Framework库嵌入iOS原生工程

UE4打包为Framework库嵌入iOS原生工程

tangfuling1991的博客 1294

解同余方程组

已知: * N=a1x+b1; N=a2y+b2; 。。。。。 N=anz+bn; 求N; 解: a1x+b1=a2y+b2; ==> a1x - a2y=b2-b1; (因为求x 所以a2前正负不影响结果); 令c=b2-b1; 通过扩展欧几里得算法对此式求解 求出x, 并得到gcd(a1,a2)=d; 如果c%d!=0,则此方程组无解; 如果有解则: 带入到 N=a1...

qq_31774967的博客 2375

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

同余方程组

@(XSY)[中国剩余定理] 中国剩余定理. 注意求逆元要用exGCD. #include <cstdio> #include <cctype> const int N = 8; void exGCD(long long a, long long b, long long &x, long long &y) { if(! b) ...

dk810510的博客 215

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

中国剩余定理与线性同余方程组求解

线性同余方程组 中国剩余定理 线性同余方程组 实际上一元一次线性同余方程组,形式如下: ⎧⎩⎨x≡r0(modm0)x≡r1(modm1)⋯{x≡r0(modm0)x≡r1(modm1)⋯ \begin{cases} x\equiv{r_0}({\rm{mod}}\,m_0) \\ x\equiv{r_1}({\rm{mod}}\,m_1) \\ \cdots \end{ca...

RBS的专栏 5053

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

密码学的数学基础3-同余方程

密码学的数学基础3-同余方程一元高次同余方程方程的性质求解策略化简:一次同余方程方程的性质与求解策略一次同余方程组,孙子定理孙子定理一般同余方程二级目录三级目录二次剩余二级目录三级目录Legendre符号与Jacobi符号二级目录三级目录习题题目参考思路 一元高次同余方程 方程的性质 求解策略 若整数 d∣m,d \mid m,d∣m, 那么同余方程 f(x)≡0( mod m)f(x) \equiv 0(\bmod m)f(x)≡0(modm) 有解的必要条件为 f(x)≡0( mod d) f(x)

C_Ronaldo__的博客 3651

解一元线性同余方程组(详解+例题)

//解一元线性同余方程组。 #include &amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;gt; #include&amp;amp;amp;amp;lt;cstdio&amp;amp;amp;amp;gt; using namespace std; typedef long long ll; ll ex_gcd(ll a,ll b,ll&amp;amp;amp;amp;amp; x,ll&amp;amp;a

兜率工的博客 1万+

求解线性同余方程组

求解线性同余方程组 线性同余方程组就是形如这样的方程组: {a1x≡b1 (mod m1)a2x≡b2 (mod m2)               ⋮anx≡bn (mod mn)\beg...

画船听雨眠 2055

线性同余方程组

线性同余方程 线性同余方程的形式:ax ≡ b (mod m),意思就是求解x的值使得 (a*x)%m=b%m 一、首先复习一下模运算,对于模运算,有以下等式成立: 假设a ≡ c (mod m)且b ≡ d(mod m),则: a + b ≡ c + d (mod m) a - b ≡ c - d (mod m) a * b ≡ c * d (mod m) 对于除法来说相对复杂一点 虽然2 ...

qq_43710979的博客 2435

数论相关:同余方程与同余方程组的解法

同余方程 形如 \(ax \equiv b \pmod n\) 的式子称为线性同余方程。对于这样的式子有解的充要条件是 \(gcd(a,n) \mid b\) . 于是扩展gcd求解 将原方程化为一次不定方程 \(ax+ny = b\) . 利用扩展欧几里得算法求解不定方程 $ ax + ny = b$ 的整数解的求解全过程,步骤如下: 1、先计算 \(gcd(a,n)\),若 \(b\...

1072

关于同余的问题

关于同余的一些问题。

m0_55341679的博客 1187

同余方程(扩欧)

那么可以用扩展欧几里得求得x和y的值,ax' + by' = d = gcd(a, b)求关于 x 的同余方程 ax≡1(modb) 的最小正整数解。可以将式子转化成ax + by = 1。因为b是模数,所以x每次加b取模b即可。那么如何保证x为最小正整数解呢?易得x = x' / d;

qq_73951189的博客 231

中国剩余定理的五种解法

原文地址:http://blog.sina.com.cn/s/blog_a6f9a3b60101favb.html一、枚举法二、解不定方程法三、逐级满足法四、化为相同除数的同余式法、五、才用到典经的、不同除数的同余式组解法    现将陈景润所著《初等数论Ⅰ》中的一个习题为例,用五种方法解算,可以对比。试解下列同余方程X≡2  (mod  7 ) X≡5  (mod  9 )X≡1  (mod  5...

qq_35312171的博客 1万+

线性同余方程

一.一元线性同余方程 形如 ax=b(mod m),a,b,为整数,m为正整数,x为未知数的同余式称为一元线性同余方程。 方程可以变形为:ax+my=c (1) 而对于方程 ax+by=(a,b) (2)是一定有解的。 因此可以把方程(1)转化为方程(2)求解。 利用拓展欧几里得算法,解出方程(2)的解,利用常数项的比例关系,可以推出方程(1)的解。 方程(1)有解的充要条件为 c%gcd(a...

weixin_43184669的博客 2343
上一篇: 第六章 数学问题 -------- 6.10 特殊的同余方程—逆元
下一篇: 第六章 数学问题 -------- 6.12 素数及质因数分解
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值