Square remainders
Let r be the remainder when (a?1)n + (a+1)n is divided by a2.
For example, if a = 7 and n = 3, then r = 42: 63 + 83 = 728 ≡ 42 mod 49. And as n varies, so too will r, but for a = 7 it turns out that rmax = 42.
For 3 ≤ a ≤ 1000, find ∑rmax.
平方余数
记r是(a?1)n + (a+1)n被a2除所得的余数。
例如,如果a = 7而n = 3,则r = 42:63 + 83 = 728 ≡ 42 mod 49。随着n的变化,r也会随之变化,但是对a = 7,可以得出rmax = 42。
对于3 ≤ a ≤ 1000,求∑rmax。
package projecteuler;
import junit.framework.TestCase;
public class Prj120 extends TestCase {
public void testSquareRemainders() {
int sum = 0;
for (int a = 3; a <= 1000; a++) {
int rmax = getRmax(a);
sum += rmax;
}
System.out.println("sum=" + sum);
}
/**
* na[1 + (-1)^(n-1)] + [1 + (-1)^n];
*
* @param a
* @return
*/
int getRmax(int a) {
int nid = 2;
int rmax = 2;
for (int n = 1; n <= 2*a; n = n + 2) {
int r = n * a * 2;
r %= (a * a);
if (r > rmax) {
rmax = r;
nid = n;
}
}
String fstr = "n=%d,a=%d,rmax=%d";
fstr = String.format(fstr, nid, a, rmax);
System.out.println(fstr);
return rmax;
}
}