misschuer

常用链接

统计

积分与排名

百事通

最新评论

nuaa 1284 1/N! = 1/X + 1/Y

#include <iostream>
#define MAX 10001
using namespace std;
bool prime[ MAX ] = {false};
int r[ MAX ];
int ff[ MAX ] , kf;
bool v[ MAX ];
int rank[ MAX ];
__int64 ans[MAX];
int k;

void factor (int n)
{
    
int i;
    
for (i = 2 ; i <= n ; ++ i)
    
{
        
while (n % i == 0)
        
{
            n 
/= i;
            r[ i ] 
++;
        }

        
if (n == 1)
            
break;
        
if (prime[ n ])
        
{
            r[ n ] 
++;
            
break;
        }

    }

}


int main()
{
    
int i , j;
    
int n , g;
    __int64   tt;
    kf 
= 0;
    
for (i = 2 ; i <= MAX ; ++ i)
        prime[ i ] 
= true;
    
for (i = 2 ; i <= MAX ; ++ i)
        
if (prime[ i ])
        
{
            ff[
++ kf] = i;
            rank[ i ] 
= kf;
            
for (j = i + i ; j <= MAX ; j += i)
                prime[ j ] 
= false;
        }

        
        
while (scanf ("%d" , &n) , n)
        
{
            g 
= 2;
            memset (r , 
0 , sizeof (r));
            
for (i = 2 ; i <= n ; ++ i)
            
{
                
if (prime[ i ])
                
{
                    r[ i ] 
++;
                    
if (i > g)
                        g 
= i;
                }

                
else
                    factor (i);
            }

            k 
= 1;
            ans[ 
1 ] = 1;
            
int tmp = 0;
            
for (i = 1 ; i <= rank[ g ] ; ++ i)
            
{
                tt 
= (r[ff[ i ]] << 1+ 1;
                
for (j = 1 ; j <= k ; ++ j)
                
{
                    ans[ j ] 
= ans[ j ] * tt + tmp;
                    tmp 
= ans[ j ] / 10000 , ans[ j ] %= 10000;
                }

                
while (tmp)
                    ans[
++ k] = tmp % 10000 , tmp /= 10000;
            }

            printf (
"%I64d" , ans[ k ]);
            
for (i = k - 1 ; i > 0 ; -- i)
                printf (
"%04I64d" , ans[ i ]);
            printf (
"\n");
        }

        
return 0;
}
这题其实是求(n!)^2的约数的个数,注意要大数处理。其余的自己去算吧,orz~~~~~~

posted on 2009-12-23 12:51 此最相思 阅读(120) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理