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();
}      
        

Download