UVA 10791 最小公倍数的和

这道题目细节琐碎,稍不注意就会WA ,特别是大数的范围,一开始没有把n声明为long long 导致最大的那个数 2147483647 结果为0 还有一开始用了 pow() 这个函数,也应该用double去接受结果。

#include<iostream>
#include<string>
#include<string>
#include<string.h>
#include<stdio.h>
#include<queue>
#include<math.h>
#include<vector>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int main(){
  int cnt,t;
  long long n,sum,temp,m=0;
  while(cin>>n){
          m++;sum=0,cnt=0;
          t=sqrt(n+1);
        if(n==0)  break;
        printf("Case %d: ",m);
        if(n==1) {cout<<2<<endl;continue;}
       for(int i=2;i<=t;i++){
         if(n%i==0){
             cnt++; temp=1;
            while(n%i==0){
                temp*=i;
                n=n/i;
            }
            sum+=temp;
         }
       }
       if(n>1){
        sum+=n;
        cnt++;
       }

     if(cnt==1)   {printf("%lld\n",sum+1);}
     else if(cnt==0) printf("%lld\n",n+1);
     else  printf("%lld\n",sum);

  }

   return 0;
}

  

posted @ 2016-03-10 10:21  咸咸的告别  阅读(146)  评论(0编辑  收藏  举报