《孙子算经》之"物不知数"题:中国剩余定理
1、《孙子算经》之"物不知数"题
今有物不知其数,三三数之剩二,五五数之剩七,七七数之剩二,问物几何?
2、中国剩余定理
定义:
设 a,b,m 都是整数. 如果 m|(a-b), 则称 a 和 b 模 m 同余, 记为

m 称为这个同余式的模.
定理(中国剩余定理):
设 m1,m2,...,mr 是两两互素的正整数. 设 a1,a2,...,ar 是整数, 则同余方程组

模 M = m1m2...mr 有唯一解

3、C语言源代码
#include<stdio.h> //////////////////////////////////////////
// 作者:落枫飘飘
// 时间:2016、04、21
// 博客:http://www.cnblogs.com/wuqianling/p/5415758.html
//////////////////////////////////////////
// 《孙子算经》之"物不知数"题:
// 今有物不知其数,三三数之剩二,五五数之剩七,七七数之剩二,问物几何?
//////////////////////////////////////////
// 根据题意我们有如下同余方程组:
// x=2%3 ---> x=3*k+2
// x=3%5
// x=2%7
////////////////////////////////////////// // 分析法求解
int analytical(float m1, float m2, float m3, float a1, float a2, float a3)
{
float x=0.0, k1=0.0, k2=0.0, k3=0.0; for(k1 = ; ; k1++)
{
x = m1*k1 + a1; // ---> x=3*k1+2
k2 = (x-a2) / m2; // ---> k2=(x-2)/3
if(k2 == (int)k2) // 判断k2是否为整数
{
k3 = (x-a3) / m3;
if(k3 == (int)k3) // 判断k3是否为整数
break;
}
}
return (int)x;
} // 中国剩余定理求解
int chineseRemainderTheorem(int m1, int m2, int m3, int a1, int a2, int a3)
{
int i, x;
int M, M1, M2, M3;
int y1, y2, y3; M = m1 * m2 * m3;
M1 = m2 * m3; // M1=M/m1=m2*m3
M2 = m1 * m3;
M3 = m1 * m2;
y1 = M1 % m1;
y2 = M2 % m2;
y3 = M3 % m3;
x = (a1*M1*y1 + a2*M2*y2 + a3*M3*y3) % M; return x;
} int main()
{
// x=2%3 即 x=a1%m1
// x=3%5 即 x=a2%m2
// x=2%7 即 x=a3%m3
int m1=, m2=, m3=;
int a1=, a2=, a3=;
printf("分析法:\nx=%d \n\n", analytical(m1,m2,m3,a1,a2,a3));
printf("中国剩余定理:\nx=%d \n\n", chineseRemainderTheorem(m1,m2,m3,a1,a2,a3));
return ;
}
《孙子算经》之"物不知数"题:中国剩余定理的更多相关文章
- 中国剩余定理CRT(孙子定理)
中国剩余定理 给出以下的一元线性同余方程组: $\Large(s):\left\{\begin{aligned}x\equiv a_1\ (mod\ m_1)\\x\equiv a_2\ (mod\ ...
- 【GDKOI2017】 两个胖子萌萌哒 小学奥数题
题目大意:给你一个$n\times m$的网格,你要在这个网格上画三角形. 三角形的顶点只能在网格的整点上,且至少有一条边平行于$x$或$y$轴,且三角形面积为整数.问你能画多少个不同的三角形. 两个 ...
- 一个hin秀的小学三年级奥数题 [hin秀]
~~~~~~不知为何总会被小学的题虐哭QAQ,真的秀啊,毒害广大小朋友~~~~~~ 一个hin秀的小学三年级奥数题 [hin秀] 题目: 给出一个无限大的棋盘 n×n (n>0 , 是 ...
- Contest 高数题 樹的點分治 樹形DP
高数题 HJA最近在刷高数题,他遇到了这样一道高数题.这道高数题里面有一棵N个点的树,树上每个点有点权,每条边有颜色.一条路径的权值是这条路径上所有点的点权和,一条合法的路径需要满足该路径上任意相邻的 ...
- 【xsy1116】数学题 奥数题
真实奥数题 题目大意:给你正整数k$,r$.问你存在多少对$(x,y)$,满足$x<y$且$x^2+y^2=kz^2$,并将所有符合条件的数对输出. 数据范围:$r≤1e9$,$k={1,2,3 ...
- python基础===一道小学奥数题的解法
今早在博客园和大家分享了一道昨晚微博中看到的小学奥数题,后来有朋友给出了答案.然后我尝试用python解答它. 原题是这样的: 数学题:好事好 + 要做好 = 要做好事,求 “好.事.做.要”的值分别 ...
- 【OI】蛇形填数题的深入探究
题目:在 n×n 方阵里填入 1,2,...n×n, 要求蛇形填数.例如,n=4 时方阵为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 ...
- qdu-凑数题(01背包)
Description 小Q手里有n(n<=1000) 个硬币,每枚硬币有一定的金额(200=>x>=1)他想知道,用这些硬币(每枚硬币只能用一次,但可能会有等面值的用两次) 能组成 ...
- CPC23-4-K. 喵喵的神数 (数论 Lucas定理)
喵喵的神∙数 Time Limit: 1 Sec Memory Limit: 128 MB Description 喵喵对组合数比較感兴趣,而且对计算组合数很在行. 同一时候为了追求有后宫的素养的生活 ...
随机推荐
- 关于phpcms中mysql和mysqli的区别
用phpcms开发一个考试成绩查询的小模块,用电脑上以前下载的phpcms版本为框架开发,一切顺利.想着下载一个最新版本,以后也免了升级的麻烦.于是,下载好,然后把模块目录.model数据库连接文件. ...
- JVM内存监控工具 JavaMelody
这是一个需要web部署的工具,需要在容器中部署,然后将要监控的程序添加到该程序中即可. JavaMelody是java应用的监控工具,安装部署步骤如下: 1. 首先先下载javamelody.jar ...
- Pcserver+oracle10g+rac
成本的相对廉价,技术的成熟,功能的强大此方案将越来越受中小企业的青睐. 一.实验前准备 虚拟机版本:Vwareserver1.0.6 Linux版本:redhat5.5enterprise服务 ...
- 获取action name在asp.net mvc
Update for MVC 3 ViewContext.Controller.ValueProvider.GetValue("action").RawValue ViewCont ...
- 通过Unity3d创建二维码(利用zxing2.2)
http://blog.csdn.net/liulala16/article/details/14521979 2013-11-08 14:53 1965人阅读 评论(3) 收藏 举报 首先 下载ZX ...
- Android学习笔记(十二)——实战:制作一个聊天界面
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...
- java代码生成二维码以及解析二维码
package com.test; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedI ...
- linux文件远程传输客户端shell脚本与分布式客户机时间同步脚本
#!/bin/bash # 将代码和脚本传送至worker节点 # 改变当前工作目录 cd ${AMAZONCRAWLER_HOME} #读取worker节点ip列表 i= while read li ...
- speex介绍
1介绍 Speex是一套主要针对语音的开源免费,无专利保护的音频压缩格式.Speex工程着力于通过提供一个可以替代高性能语音编解码来降低语音应用输入门槛 .另外,相对于其它编解码器,Speex也很适合 ...
- Shell 语法 if 、 case 、for 、 while、 until 、select 、repeat、子函数
if语法 : if [ expression ] then commandselif [ expression2 ] then commandselse commandsfi ...