#include <stdio.h>
#include <stdlib.h>

#define Tp 23
#define Te 28
#define Ti 33

int main ()
{
int p, e, i, d;
int num = 1;
while (scanf ("%d%d%d%d", &p, &e, &i, &d) != EOF && (p != -1 && e != -1 && i != -1 && d != -1))
{
int j;
for ( j = 1; j <= 21252; j ++)
{
if ( ((j - p) % Tp == 0) && ((j - e) % Te == 0) && ((j - i) % Ti ==0) )
{
if ( j - d > 0)
printf ("Case %d: the next triple peak occurs in %d days.\n", num, j - d);
else
printf ("Case %d: the next triple peak occurs in %d days.\n", num, j - d + 21252);
break;
}
}
num ++;
}
system ("pause");
return 0;
}

http://tiandiwuyong1989.blog.163.com/blog/static/122572981200962121733/本題就是要求得滿(mǎn)足下面條件的 x 的值:
( x - p ) % Tp = 0; ( x - e ) % Te = 0; ( x - i ) % Ti = 0;
由同余可得:x % Tp = p % Tp = a
x % Te = p % Te = b
x % Ti = p % Ti = c
再由中國(guó)剩余定理就可以知道了!
//2.用中國(guó)剩余定理解
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int p, e, i , d, x;
int Tp = 23, Te = 28, Ti = 33;
int num = 1;
while (scanf ("%d%d%d%d", &p, &e, &i, &d ) != EOF && (p != -1 && e != -1 && i != -1 && d != -1) )
{
int a = p % Tp;
int b = e % Te;
int c = i % Ti;
int n1, n2, n3;
for (int j = 1; j < 33; j ++)
{
if ( (23 * 28 * j) % 33 == 1)
{
n1 = j;
break;
}
}
for (int j = 1; j < 28; j ++)
{
if ( (23 * 33 * j) % 28 == 1)
{
n2 = j;
break;
}
}
for (int j = 1; j < 23; j ++)
{
if ( (33 * 28 * j) % 23 == 1)
{
n3 = j;
break;
}
}

x = (28 * 23 * n1 * c + 23 * 33 * n2 * b + 28 * 33 * n3 * a ) % (23 * 33 * 28);
if ( x - d > 0)
printf ("Case %d: the next triple peak occurs in %d days.\n", num, x - d);
else
printf ("Case %d: the next triple peak occurs in %d days.\n", num, x - d + 21252);
num++;
}
//system ("pause");
return 0;
}

posted on 2010-08-29 11:10
雪黛依夢(mèng) 閱讀(434)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
數(shù)論