/* Use the slash-star style comments or the system won't see your
identification information */
/*
ID: lincans1
LANG: JAVA
TASK: ariprog
*/
import java.io.*;
import java.util.*;
public class ariprog {
private int MAX;
private boolean DFS(int a, int b, int N, boolean[] flag) {
if (N == 0) {
return true;
}
if (a + b * N > MAX) {
return false;
}
if (flag[a + b]) {
return DFS(a + b, b, N - 1, flag);
}
else {
return false;
}
}
public ariprog() throws IOException {
// Use BufferedReader rather than RandomAccessFile; it's much faster
BufferedReader f = new BufferedReader(new FileReader("ariprog.in"));
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("ariprog.out")));
int N = Integer.parseInt(f.readLine());
int M = Integer.parseInt(f.readLine());
this.MAX = 2 * M * M;
// find all the p^2 + q^2
boolean[] flag = new boolean[MAX + 1];
for (int p = 0; p <= M; p++) {
for (int q = 0; q <= M; q++) {
flag[p * p + q * q] = true;
}
}
// push all elements to the list
List<Integer> list = new ArrayList<>();
for (int i = 0; i <= MAX; i++) {
if (flag[i]) {
list.add(i);
}
}
// check every (a, b)
boolean noSolution = true;
for (int b = 1, n = MAX / (N - 1); b <= n; b++) {
for (int a : list) {
if (DFS(a, b, N- 1, flag)) {
noSolution = false;
out.println(a + " " + b);
}
}
}
if (noSolution) {
out.println("NONE");
}
out.close();
f.close();
}
public static void main (String [] args) throws IOException {
new ariprog();
}
}
[Java] Arithmetic Progressions
最新推荐文章于 2022-04-07 12:51:50 发布