韩信点兵-中国剩余定理(练习)

http://acm.nyist.net/JudgeOnline/problem.php?pid=34提交地址

韩信点兵-中国剩余定理。

题目可以用枚举很简单的做出来,在这里写是为了运用一下刚刚学习的中国剩余定理。

以前写过中国剩余定理的博客在这就不多说了。

如果下面的字母看不懂请看我的另一篇博客http://blog.csdn.net/u010123208/article/details/24314627

说一说思路吧。

1.首先我们要用数组存储我们的要的除数,和余数。我们用m[]来存储,余数我们用a[]来存储。

2.接下来我们要计算M了 ,然后是mi mi的值我用mm[]来存储的。

3.现在主要的任我就是计算mi的逆元了。计算逆元我们当然要用扩展欧几里得定理了。注意在用扩展欧几里得定理的时候我们会遇到这样的问题,返回的结果是个负数,举个例子就是 m1的逆元  mm[1]x + m[1]y = 1;返回x=-1,y=12,这个可是这不是我们想要的数值,我们可以用m[1]+x = 2; mm[1]-y=23;(这个结论是我在群里问他们,他们说自己计算一下,具体的也没说,我就突然想到这样来计算试试,结果真行,我又试了几个,也行,这具体怎样我也不知道。希望有看到博客对扩展欧几里得定理比较清楚的给我留下言,我请教一下,在这谢谢了)。

4 我们需要的东西都已经求出来了。我们就可以计算结果了。(如果不知道请看我的另一篇博客中介绍的)

下面贴出代码,代码只是为了练习而已,对于上面的题目而言,提交肯定会错的,因为。。。但是只对于我们的中国剩余定理来时是正确的。

#include<iostream>
using namespace std;
int  exgcd(int  i,int  j,int  &ansx,int  &ansy)  //扩展欧几里得定理
{
    int  d = i;
    if(j==0)
    {
        ansx=1;
        ansy=0;
        return d;
    }
    d=exgcd(j,i%j,ansx,ansy);
    int  temp = ansx;
    ansx=ansy;
    ansy=temp-(i/j)*ansy;
    return d;
}
int main()
{
	int a[4];//余数
	for(int i=1;i<4;i++)
		cin>>a[i];
	int m[4]={0,3,5,7};//取模的数  质数
	int mm[4]={0,35,21,15};
	int t[4];//逆元
	for(int i=1;i<4;i++)
	{
		int x,y;
		exgcd(mm[i],m[i],x,y);
		if(x<0)
			x=m[i]+x;
		t[i]=x;
	}
	int sum=0;
	for(int i=1;i<4;i++)
	{
		sum=sum+t[i]*a[i]*mm[i];
	}
	cout<<sum%105<<endl;
	system("pause");
}

好了!

感谢自己坚持。

韩信点兵-中国剩余定理(练习)

时间: 2024-11-07 18:46:10

韩信点兵-中国剩余定理(练习)的相关文章

韩信点兵(中国剩余定理)

中国剩余定理是数论中的一个关于一元线性同余方程组的定理,说明了一元线性同余方程组有解的准则以及求解方法.又称为孙子定理,"韩信点兵""求一术""鬼谷算""隔墙算""剪管术""秦王暗点兵""物不知数"等名称. 例如:物不知数原文: 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 宋朝数学家秦九韶对"物不知数"问题作出了完整系统的解

Hello Kiki(中国剩余定理——不互质的情况)

Hello Kiki Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 247 Accepted Submission(s): 107   Problem Description One day I was shopping in the supermarket. There was a cashier counting coins serio

COGS 1786. 韩信点兵

★★★   输入文件:HanXin.in   输出文件:HanXin.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 韩信是中国军事思想“谋战”派代表人物,被后人奉为“兵仙”.“战神”.“王侯将相”韩信一人全任.“国士无双”.“功高无二,略不世出”是楚汉之时人们对其的评价.作为统帅,他率军出陈仓.定三秦.擒魏.破代.灭赵.降燕.伐齐,直至垓下全歼楚军,无一败绩,天下莫敢与之相争. 相传,韩信带兵打仗时,从不直接清点军队人数.有一次,韩信带1500名兵士打仗,战死四

中国剩余定理(CRT)

今有物,不知其数,三三数之,剩二:五五数之,剩三:七七数之,剩二.问物几何          ——<孙子算经> 答为“23”.也就是求同余式组 x≡2 (mod3),x≡3 (mod5 ),x≡2 (mod7)的正整数解. 不难看出,题中3,5,7分别是互质的.具体解法是这样的 1.找出三个数:从3和5的公倍数中找出被7除余1的最小数15,从3和7的公倍数中找出被5除余1 的最小数21,最后从5和7的公倍数中找出除3余1的最小数70.2.用15乘以2(2为最终结果除以7的余数),用21乘以3(

Biorhythms(中国剩余定理)

Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 127339   Accepted: 40342 Description Some people believe that there are three cycles in a person's life that start the day he or she is born. These three cycles are the physical,

lightoj 1319 - Monkey Tradition (中国剩余定理)

1319 - Monkey Tradition PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB In 'MonkeyLand', there is a traditional game called "Bamboo Climbing". The rules of the game are as follows: 1)       There are N monkeys who play

HDU 5446 Unknown Treasure(lucas + 中国剩余定理 + 模拟乘法)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5446 题目大意:求C(n, m) % M, 其中M为不同素数的乘积,即M=p1*p2*...*pk, 1≤k≤10.1≤m≤n≤10^18. 分析: 如果M是素数,则可以直接用lucas定理来做,但是M不是素数,而是素数的连乘积.令C(n, m)为 X ,则可以利用lucas定理分别计算出 X%p1,X%p2, ... , X % pk的值,然后用中国剩余定理来组合得到所求结果. 比较坑的地方是,

UVA 11754 Code Feat (枚举,中国剩余定理)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud C Code Feat   The government hackers at CTU (Counter-Terrorist Unit) have learned some things about the code, but they still haven't quite solved it.They know it's a single, strictly positive

hdu1573X问题(不互素的中国剩余定理)

X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3295    Accepted Submission(s): 1068 Problem Description 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], -, X mo