Arithmetic Progressions
时间:2011-02-23 来源:李科.YM
/*
ID: like_091
PROG: ariprog
LANG: C++
*/
#include<iostream>
#include<cmath>
#include<fstream>
using namespace std;
const int MAX = 250;
int d[MAX * MAX * 2 + 1], tem;
struct Node{
int x, y;
}node[10001];
int cmp(const void *a, const void *b)
{
Node *c = (Node *)a;
Node *d = (Node *)b;
if (c->y == d->y)
return c->x - d->x;
return c->y - d->y;
}
void fun(int m)
{
for (int i = 0; i <= m; i++)
for (int j = 0; j <= m; j++)
d[i * i + j * j] = 1;
}
void enqueue(int a, int b)
{
node[tem].x = a;
node[tem++].y = b;
}
int main()
{
ifstream cin("ariprog.in");
ofstream cout("ariprog.out");
int m, n, len;
cin>>n>>m;
len = (int)sqrt(m * m * 2.0);
for (int i = 0; i <= m * m * 2; i++)
d[i] = 0;
fun(m);
tem = 0;
for (int i = 0; i <= m * m * 2; i++)
if (d[i])
{
bool flag = true;
for (int j = 1; j <= (m * m * 2 - i) / (n - 1); j++)
{
bool flag = true;
for (int k = 1; k < n; k++)
if (!d[k * j + i])
{
flag = false;
break;
}
if (flag)
enqueue(i, j);
}
}
qsort(node, tem, sizeof(node[0]), cmp);
if (!tem)cout<<"NONE"<<endl;
for (int i = 0; i < tem; i++)
cout<<node[i].x<<" "<<node[i].y<<endl;
return 0;
}
相关阅读 更多 +










