/*
PROG: ariprog
ID: mercury2
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
struct Ans {
int start;
int step;
};
bool compareOp(const Ans& ans1, const Ans& ans2);
int main() {
ifstream fin("ariprog.in");
ofstream fout("ariprog.out");
int n, m, i, j, k;
bool solved = false;
fin >> n >> m;
// generate Arithmetic Progressions sequence
bool seq[250*250*2 + 1];
for (i = 0; i <= m * m * 2; i++) {
seq[i] = false;
}
for (i = 0; i <= m; i++) {
for (int j = 0; j <= i; j++) {
seq[i*i + j*j] = true;
}
}
vector<Ans> result;
int step;
for (i = 0; i <= m * m * 2; i++) {
if (!seq[i]) {
continue;
}
for (j = i + 1; j <= m * m * 2; j++) {
if (!seq[j]) {
continue;
}
step = j - i;
if (i + step * (n - 1) > m * m * 2) {
break;
}
bool flag = true;
for (k = 1; k < n; k++) {
if (!seq[i + step * k]) {
flag = false;
break;
}
}
if (flag) {
Ans ans;
ans.start = i;
ans.step = step;
result.push_back(ans);
solved = true;
}
}
}
if (!solved) {
fout << "NONE" << endl;
}
sort(result.begin(), result.end(), compareOp);
vector<Ans>::iterator iter;
for (iter = result.begin(); iter != result.end(); iter++) {
fout << iter->start << " " << iter->step << endl;
}
fout.close();
return 0;
}
bool compareOp(const Ans& ans1, const Ans& ans2) {
return ans1.step < ans2.step;
}
PROG: ariprog
ID: mercury2
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
struct Ans {
int start;
int step;
};
bool compareOp(const Ans& ans1, const Ans& ans2);
int main() {
ifstream fin("ariprog.in");
ofstream fout("ariprog.out");
int n, m, i, j, k;
bool solved = false;
fin >> n >> m;
// generate Arithmetic Progressions sequence
bool seq[250*250*2 + 1];
for (i = 0; i <= m * m * 2; i++) {
seq[i] = false;
}
for (i = 0; i <= m; i++) {
for (int j = 0; j <= i; j++) {
seq[i*i + j*j] = true;
}
}
vector<Ans> result;
int step;
for (i = 0; i <= m * m * 2; i++) {
if (!seq[i]) {
continue;
}
for (j = i + 1; j <= m * m * 2; j++) {
if (!seq[j]) {
continue;
}
step = j - i;
if (i + step * (n - 1) > m * m * 2) {
break;
}
bool flag = true;
for (k = 1; k < n; k++) {
if (!seq[i + step * k]) {
flag = false;
break;
}
}
if (flag) {
Ans ans;
ans.start = i;
ans.step = step;
result.push_back(ans);
solved = true;
}
}
}
if (!solved) {
fout << "NONE" << endl;
}
sort(result.begin(), result.end(), compareOp);
vector<Ans>::iterator iter;
for (iter = result.begin(); iter != result.end(); iter++) {
fout << iter->start << " " << iter->step << endl;
}
fout.close();
return 0;
}
bool compareOp(const Ans& ans1, const Ans& ans2) {
return ans1.step < ans2.step;
}