0
点赞
收藏
分享

微信扫一扫

杭电校赛(逆袭指数)

言诗把酒 2022-08-04 阅读 87


逆袭指数

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

杭电校赛(逆袭指数)_i++

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;
}


举报

相关推荐

0 条评论