NYOJ-题目(Math)--151------------------------------------Biorhythms

http://acm.nyist.net/JudgeOnline/problem.php?pid=151
package org.acm.math;

/*
 * 详情参考:http://blog.csdn.net/lyy289065406/article/details/6648551
 * 先说下,题意:( n + d ) % 23 = a , ( n + d ) % 28 = b , ( n + d ) % 33 = c , 求 n 。
 * 使 (33 * 28 * x ) % 23 == 1 , 得到 x = 8 , 33 * 28 * 8  = 5544 
 * 使 (33 * 23 * y ) % 28 == 1 , 得到 y = 19 , 33 * 23 * 19  = 14421 
 * 使 (23 * 28 * z ) % 33 == 1 , 得到 z = 2 , 23 * 28 * 2  = 1288
 * 又有23,28, 33互质,因此最小公倍数是23*28*33 = 24252 
 * 因此有(5544×a+14421×b+1288×c)% lcm(23,28,33) =n+d 
 * 本题所求的是最小整数解,避免n为负,因此最后结果为n= [n+21252]% 21252
 * 那么最终求解n的表达式就是:n = ( 5544 * a + 14421 * b + 1288 * c  - d + 21251 ) % 21252 + 1
 * */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

public class Math_151 {

	public static void main(String[] args) throws IOException {

		StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

		int a, b, c, d;
		while (true) {
			st.nextToken();
			a = (int) st.nval;
			st.nextToken();
			b = (int) st.nval;
			st.nextToken();
			c = (int) st.nval;
			st.nextToken();
			d = (int) st.nval;

			if (a == -1 && b == -1 && c == -1 && d == -1)
				break;
			System.out.println((5544 * a + 14421 * b + 1288 * c - d + 21251) % 21252 + 1);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值