Minimum Sum LCM UVA - 10791

问题

分析

质因数分解,分解成 n = i a i b i n=\sum_ia_i^{b_i} ,其中每个 a i b i a_i^{b_i} 作为一个整数
注意特例: 输入 1,输出2 输入素数x,输出x+1,输入只分解出一个整数的,如8,那么输出要加1

#include <cstring>
#include <cstdio>
#include <vector>
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
typedef long long ll;
ll n;
int kase=0;
vector<int> prime;

ll solve(){
    if(n==1) return 2;
    ll ans=0,num=0;  //结果,素数的个数
    ll m=sqrt(n+0.5);
    for(ll i=2;i<=m;++i){
        ll t=0,t2=1;
        while(n%i==0){
            n/=i;
            t++;
            t2*=i;
        }
        if(t){
            ++num;
            ans+=t2;
        }
        if(n==1) break;
    }
    if(n>1){   //剩下的质因子
        ++num;
        ans+=n;
    }
    if(num<=1) ans+=1;  //只有1个因子 n=1*n
    return ans;
}

int main(void){
    while(scanf("%lld",&n)==1 && n){
        printf("Case %d: %lld\n",++kase,solve());
    }
}

发布了50 篇原创文章 · 获赞 0 · 访问量 680

猜你喜欢

转载自blog.csdn.net/zpf1998/article/details/104217922