POJ 2603-Brave balloonists 求BigInt的最大公约数(用数论知识解决)

POJ 2603-Brave balloonists 求BigInt的最大公约数(用数论知识解决)

原来这道题用数论的方法如此简单啊,这样就不用进行大数操作了 呵呵;
数论算法如下:


若正整数n可分解为(p1^a1)*(p2^a2)*…*(pk^ak)
其中pi为两两不同的素数,ai为对应指数
n的约数个数为(1+a1)*(1+a2)*….*(1+ak)

做完不禁赞叹到,此法甚妙~定要掌握之 呵呵

#include < iostream >
#include
< cmath >
#include
< algorithm >
using   namespace  std;


int  a[ 10001 ];

int  main ()
{

    
int n;
    
int i;
    
int j;
    
for(i=1;i<=10;i++)
    
{

        scanf(
"%d",&n);
        
for(j=2;;j++)
        
{

            
while(n%j==0&&n!=1)
            
{
                a[j]
++;
                n
/=j;
            }

            
if(n==1)
                
break;
        }




    }

    
int result=1;
    
for(i=2;i<=10000;i++)
    
{

        
if(a[i]!=0)
        
{

            result
=result*(a[i]+1);
        }

    }

    printf(
"%d\n",result%10);
    system(
"pause");
    
return 0;

}


 


你可能感兴趣的:(POJ 2603-Brave balloonists 求BigInt的最大公约数(用数论知识解决))