24h購物| | PChome| 登入
2009-11-19 21:47:41| 人氣1,418| 回應0 | 上一篇 | 下一篇

ACM 10791 Q10791: Minimum Sum LCM

推薦 0 收藏 0 轉貼0 訂閱站台

作法: 質因數分解

要小心測資的範圍  可以到2147483648喔

還有1要輸出2!

不管怎樣集合都要有2個以上!

/*********************************************************/

#include<stdio.h>  
#include<stdlib.h>  
#include<math.h>  
int Prime[5200]={0},p,PII[5200]={0}; 
char pp[50001]={0};  
unsigned int N;  
int prime()     
{     
 int a,b,m=1;  
 Prime[0]=2;     
 PII[0]=4;
 for(a=3;a<=50000;a=a+2)        
      if(pp[a]==0)        
        {        
           Prime[m]=a;        
           PII[m]=a*a;
           m++;        
           for(b=3;a*b<=50000;b=b+2)        
             pp[a*b]=1;        
        }     
   return m;     
}   
int value[51]={0},time[51]={0},top=0;  
int Divisors (unsigned int num)  
{  
   int a,b,C=1;  
   for(a=0;a<p&&PII[a]<=num&&num!=1;a++)  
        if(num%Prime[a]==0)  
          {  
             value[++top]=1;  
             while(num%Prime[a]==0)  
                  {  
                   num/=Prime[a];  
                   value[top]*=Prime[a];  
                  }   
          }  
    if(num!=1)  
       value[++top]=num;  
}  
main()  
{  
 p=prime();   
 int a,b,time=0;
 unsigned int SUM;  
 while(scanf("%lu",&N)==1&&N)  
    {  
       top=0,SUM=0;  
       Divisors(N);  
       printf("Case %d: ",++time);
       for(a=1;a<=top;a++)
         SUM+=value[a];
       if(top==1) SUM++;
       if(N==1) SUM=2;
       printf("%lu\n",SUM);
    }  
 return 0;     
}  

台長: 來源不明
人氣(1,418) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
此分類下一篇:ACM 11495 11495 - Bubbles and Buckets
此分類上一篇:ACM 10810 Q10810: Ultra-QuickSort

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文