SQUARES - Hình vuông
Tác giả: hieult
Ngôn ngữ: C++
#include <stdio.h>
//#include <conio.h>
#include <math.h>
long n[200];
long Ole(long N)
{
long k=1,KQ=1;
if(N==2)
return 2;
else
{
for(long i=1;i<=180;i++)
{
if(N==1)
break;
else if(n[i]>sqrt(N))
{
KQ*=(N-1);
break;
}
else if(N%n[i]==0)
{
long t=0;
do
{
N=N/n[i];
t++;
}while(N%n[i]==0);
KQ=KQ*(n[i]-1)*pow(n[i],t-1);
}
}
return KQ;
}
}
main()
{
long t=2,T,KQ=0;
n[1]=2;
n[2]=3;
for(long i=4;i<1100;i++)
{
int k=0;
for(long j=1;j<=t;j++)
{
if(i%n[j]==0)
{
k=1;
break;
}
else if(n[j]>sqrt(i))
break;
}
if(k==0)
{
t++;
n[t]=i;
}
}
scanf("%ld",&T);
for(long i=1;i<=sqrt(T);i++)
{
if(i*i==T)
KQ=KQ+Ole(i+1)/2;
else if(T%i==0)
KQ=KQ+Ole(i+1)/2+Ole(T/i+1)/2;
}
printf("%ld",KQ);
//getch();
}