杭电校赛(逆袭指数)

逆袭指数

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1854    Accepted Submission(s): 374


Problem Description
  这依然是关于高富帅小明曾经的故事——

  尽管身处逆境,但小明一直没有放弃努力,除了搬砖,小明还研究过东方的八卦以及西方的星座,一直试图在命理上找到自己能够逆袭的依据。

  当这些都失败以后,小明转向了数学研究,希望从中得到一些信息。一天,小明在研究《BestCoder逆袭的数理基础》这本书时,发现了宝贵的信息,其中写道:
  每个人都存在一个逆袭指数,对于这个逆袭指数,可能存在连续的因子,如果这个连续因子足够长的话,那么这个人逆袭的概率就很大!

  小明已知自己的逆袭指数,请告诉小明他最长的连续因子,以让他来判断他自己是否能够逆袭。
 

Input
输入包含多组测试数据。
每组数据占一行,包含一个整数N,表示小明的逆袭指数,N小于2^31。
 

Output
对于每组数据,请输出2行:
第一行输出最长的因子个数;
第二行输出最小的因子序列,具体请参考样例。

特别说明:由于小明十分讨厌单身,所以1不算因子。
 

Sample Input
   
   
   
   
630 12
 

Sample Output
   
   
   
   
3 5*6*7 2 2*3
Hint
630 = 3*5*6*7
 思路:猛一看还挺难的,看了大神的博客才知道自己有多菜,大神地址:http://www.1or1.xyz/?p=182
AC代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>

typedef long long ll;
using namespace std;

int n;

int cf(int l)
{
    int sum = 0;
    int temp = n;//while里面不能直接除以n,会导致以后的n值不对
    while(temp)
    {
        if(temp % l == 0)
        {
            temp = temp / l;
            sum++;
            l++;
        }
        else
            break;
    }
    return sum;
}

int main()
{
    int i;
    while(scanf("%d",&n) != EOF)
    {
        if(n == 1)
        {
            printf("0\n");
            continue;
        }
        int k;
        int max1 = 0;
        int sum = 0;
        for(i=2; i*i<=n; i++)
        {
            if(n % i == 0)
            {
                sum = cf(i);
            }
            if(sum > max1)
            {
                max1 = sum;
                k = i;
            }
        }
        if(max1 == 0)
        {
            printf("1\n");
            printf("%d\n",n);
            continue;
        }
        printf("%d\n",max1);
        for(i=0; i<max1; i++)
        {
            if(i == 0)
                printf("%d",k);
            else
                printf("*%d",++k);
        }
        printf("\n");
    }
    return 0;
}


你可能感兴趣的:(杭电校赛(逆袭指数))