ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

L1-006 连续因子

2022-06-26 23:01:59  阅读:174  来源: 互联网

标签:count max start 因子 006 L1 最长 连续


image


本来看到题目,我的第一反应是for循环找出N的所有因子,把他们存在一个数组里,然后把他们相乘,并排列成最长的连续因子,但是这样实现起来好像有点复杂,想到这是L1的题目,应该不会这么难,应该是我思路错了。

正解

用for循环,i从2开始到sqrt(N),记录从i开始的最长连续因子的个数count,如果比之前的max还要大,那么max=count,连续因子的起始位置start=i,遍历过后,start就是最长连续因子的起点,max是最长连续因子的长度,输出即可。

代码


#include<iostream>
#include<math.h>
using namespace std;

int main()
{
    int n,k,i,j,count,max_count=0,start;
    cin>>n;
    for(i=2;i<=sqrt(n);i++)
    {
        count=0;
        j=i;
        k=n;
        while(k%j==0)
        {
            k=k/j;
            j++;
            count++;
        }
        if(max_count<count)
        {
            max_count=count;
            start=i;
        }
    }
    if(max_count)
    {
        cout<<max_count<<endl;
        for(i=0;i<max_count-1;i++)
        {
            cout<<start+i<<"*";
        }
        cout<<start+i<<endl;
    }
    else
    {
        cout<<1<<endl<<n<<endl;
    }
    return 0;
}

注意

  • 最后要有一个if语句,如果N是素数,比如11,那只用输出1\n11,如果不是素数,就用for循环输出最长连续因子
  • 一开始提交的时候部分错误,有几组数据超时了,经过分析,是因为max没有赋初值,默认是一个很大的值,如果N是素数,在找最长连续因子的时候max的值不会被修改,那么在最后输出结果的时候会输出很长很长,导致超时。

标签:count,max,start,因子,006,L1,最长,连续
来源: https://www.cnblogs.com/sxlo/p/16414641.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有