POJ2992 Divisors 因子和因子个数的应用

2014-11-24 07:16:22 · 作者: · 浏览: 0

本题过题率并不是很高,只有百分之三十不到的样子,数字很大,看着比较吓人的,

由于k与n很大,求组合数 肯定不可能,所以要先求约数有多少个,直接进行素因子分解,因为组合数其实 是有公式 的 可以写成阶乘的形式,因此先对阶乘进行素因子分解

1.看看题目的数据范围,大概筛选500以内的素数就可以了

2.然后对每隔阶乘进行素因子分解

3.求出组合输的素因子分解而后便可得到约数的个数;


#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
        
          #include
         
           #include
           #include
           
             #include
            
              #include
             
               #include
              
                #define ll long long #define eps 1e-8 #define inf 0xfffffff const ll INF = 1ll<<61; using namespace std; //vector
               
                 > G; //typedef pair
                
                  P; //vector
                 
                   > ::iterator iter; // //map
                  
                   mp; //map
                   
                    ::iterator p; // bool vis[502]; int a[102],cnt; int divide[502][102]; ll ans[502][502]; void clear() { memset(divide,0,sizeof(divide)); memset(ans,0,sizeof(ans)); memset(vis,false,sizeof(vis)); memset(a,0,sizeof(a)); cnt=0; } void init() { clear(); vis[0]=vis[1]=false; for(int i=2;i<500;i++) { if(!vis[i]) a[cnt++]=i; for(int j=0;j
                    
                     >n>>k) { if(k==0 || n==k) { puts("1"); continue; } cout<