5083是对的。
double太大时,模一个比较小的数就模不出来了。
修改后:
package fd.misc;
public class Math1 {
private static final int LIMIT_LOW = 0;
private static final int LIMIT_HI = 70;
private static final int MAGIC_NUM = 71;
static int x, y, z;
/**
* @param args
*/
public static void main(String[] args) {
int count = 0;
for (x = LIMIT_LOW; x <= LIMIT_HI; x++) {
for (y = LIMIT_LOW; y <= LIMIT_HI; y++) {
for (z = LIMIT_LOW; z <= LIMIT_HI; z++) {
double result = getResult();
if (result % 71 == 0) {
System.out.println("x=" + x + ",y=" + y + ",z=" + z);
count++;
}
}
}
}
System.out.println(count);
}
private static double getResult() {
return getUnit(13, 2, 1, 0) + getUnit(4, 4, 0, 3) + getUnit(5, 3, 5, 6)
+ getUnit(3, 0, 7, 16);
}
private static double getUnit(int n, int xn, int yn, int zn) {
return n * pow(x, xn) * pow(y, yn) * pow(z, zn);
}
private static int pow(int x2, int xn) {
int result = 1;
for(int i=0;i<xn;i++) {
result = result * x2;
result %= MAGIC_NUM;
}
return result;
}
}
PS:对这类问题结构化就够了吧,难道用topcoder的模式写?
[ 本帖最后由 fantasydog 于 2008-2-16 16:40 编辑 ]
|