题目分析
如果看条件II If <m,n>·<x,y> = <p,q>, then (m2 + n2)(x2 + y2 ) = p2 + q2 .
并且由于所有的都是正整数,那么我们其实就可以将所有平方数的和的数拿出来相乘比较下有木有满足要求的,且不是1和m2 + n2,,所以问题就变成了一个类似于求素数的问题。
AC代码
#include <iostream>
#include <cmath>
using namespace std;
bool f[20001];
void init()
{
int i,j,k;
for (i=0;i<=200;i++)
for (j=0;j<=200;j++)
{
k=i*i+j*j;
if(k>20000)break;
f[k]=1;
}
}
int main()
{
init();
int T;
cin>>T;
while (T--)
{
int n,m,i,k;
cin>>n>>m;
k=n*n+m*m;
for (i=sqrt(k);i>1;i--)
{
if(f[i] && k%i==0 && f[k/i])
{
cout<<"C"<<endl;
break;
}
}
if(i==1)
cout<<"P"<<endl;
}
return 0;
}