码迷,mamicode.com
首页 > 其他好文 > 详细

UESTC 1246 拆x3

时间:2015-11-29 13:30:01      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

用归纳法分析可以知道死循环只有4。

分析一下复杂度,如果n很大并且不是素数,根据基本不等式可以知道 sum factor(n) ≥ 2+n/2 ≈ n/2。

复杂度是O(T*logN*sqrt(N)),这个上界比较松。如果是用Pollard_rho再开个平方估计常数也差不多了。

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;


int decompose(int x, bool &is_pm)
{
    int re = 0;
    for(int i = 2; i*i <= x; i++){
        while(x % i == 0){
            re += i; x /= i;
        }
    }
    is_pm = !re;
    if(x > 1) {
        re += x;
    }
    return re;
}


//#define LOCAL
int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
#endif
    int x, y;
    bool is_pm;

    while(~scanf("%d", &x)){
        if(x == 4) puts("-1");
        else {
            while(true){
                y = decompose(x, is_pm);
                if(is_pm) break;
                x = y;
            }
            printf("%d\n", x);
        }
    }
    return 0;
}

 

UESTC 1246 拆x3

标签:

原文地址:http://www.cnblogs.com/jerryRey/p/5002346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!