PYTHAEQ - Phương trình Pythagore nghiệm nguyên
Tác giả: hieult
Ngôn ngữ: C++
#include <stdio.h>
//#include <conio.h>
#include <math.h>
long UCLN(long n,long m)
{
while(1)
{
if(n==1||m==1)
return 1;
else if(n==0||m==0)
return 0;
else if(n>m)
n=n-m*(n/m);
else m=m-n*(m/n);
}
}
long f(long N)
{
long T=0,a;
for(long i=1;i<sqrt(N);i++)
{
a=long(sqrt(N-i*i));
if((a*a+i*i==N)||((a+1)*(a+1)+i*i==N))
{
//printf("%ld %ld ",N,i);
if(UCLN(N,i)==1&&i*2!=N&&(a-i)%2!=0)
T++;
}
}
return T;
}
main()
{
long N,KQ=0;
scanf("%ld",&N);
for(long i=1;i<=sqrt(N);i++)
{
if(i*i==N)
KQ+=f(i);
else if(N%i==0)
KQ=KQ+f(i)+f(N/i);
}
printf("%ld",4*(1+KQ));
//getch();
}