zoukankan      html  css  js  c++  java
  • 连续因子( 贪心)


    title: L1-006. 连续因子
    tags: [acm,天梯赛,贪心]

    题目链接

    一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为356*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

    输入格式:

    输入在一行中给出一个正整数N(1<N<231)。

    输出格式:

    首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1因子2……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。

    输入样例:

    630
    
    

    输出样例:

    3
    5*6*7
    

    分析

    题目给的数据是不超过2的31次方,而12的阶乘刚好小于2的31次方的,也就是极端的情况会是2 3 4 5 6 7 8 9 10 11 12 ,这就是最长的数据了,为了把这种情况输出来,长度应该最大为12;

    用暴力求解:对于一个数应,他的连续因子有以下情况

    2 3 4 5 6 7 8 9 10 11 12 13 (连续12个因子)

    3 4 5 6 7 8 9 10 11 12 13 14

    .

    .

    .

    .

    2 3 4 5 6 7 8 9 10 11 12 (连续11个因子)

    3 4 5 6 7 8 9 10 11 12 13

    最大的因子也不会超过 这个数的开方

    代码

    #include <cstdio>
    #include <cmath>
    #include<iostream>
    using namespace std;
    int main()
    {
    
        int n;
        cin>>n;
        int m=sqrt(n);
        for(int len=11; len>=1; len--)//控制因子的个数
        {
            for(int s=2; s<=m; s++)//第一个因子
            {
                long long ans=1;
                for(int i=s; i-s<len; i++)
                {
                    ans*=i;
                    if(ans>n)
                        break;
                }
                if(n%ans==0)
                {
                    printf("%d
    %d",len,s);
                    for(int j=s+1;j<s+len;j++)
                        printf("*%d",j);
                    return 0;
                }
            }
        }
        printf("1
    %d",n);//质数
        return 0;
    }
    
    
  • 相关阅读:
    2017-3-28 javaScript DOM 操作
    2017-3-28 JavaScript 基础、语法
    2017-3-25 CSS 样式表(二)
    js判断文件是否存在的方法
    关于eclipse添加自动查找文件以及svn的插件
    关于jqgrid的一些使用
    ztree框架使用问题汇总
    bootstrap框架的使用
    UIButton 设置阴影效果
    xcode升级至9.0之后,新建xib报错: Safe Area Layout Guide Before IOS 9.0
  • 原文地址:https://www.cnblogs.com/dccmmtop/p/6710396.html
Copyright © 2011-2022 走看看