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

Download