zoukankan      html  css  js  c++  java
  • 天梯赛--连续因子

    一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3*5*6*7,
    其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
    输入格式:
    输入在一行中给出一个正整数N(1<N<2^31^)。
    输出格式:
    首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1*因子2*……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。
    输入样例:
    630
    输出样例:
    3

    5*6*7

    解:用一个for循环枚举满足连乘的最小因子起点(star),另一个for循环记录连续因子的长度,并判断连乘乘积是否小于n,再不断更新连续因子的起点和长度

    注意n为质数的情况, 数据类型为long long

    #include<iostream>
    #include<math.h>
    #define ll long long
    using namespace std;
    int main()
    {
      ll n,num;
      cin>>n;
      int star=0,len=0;
      for(int i=2;i<=sqrt(n);i++)//i*i<=sqrt(n)
      {
        num=1;
        for(int j=i;j*num<=n;j++)
        {
          num=num*j;
          if(n%num==0&&j-i+1>len)//只记录最长的连乘因子
          {
            star=i;//更新起点
            len=j-i+1;//更新长度
          }
        }
      }
    
    if(star==0)//为质数
    {
      star=n;
      len=1;
    }
     cout<<len<<endl;
     cout<<star;
     for(int i=star+1;i<star+len;i++)
     {
      cout<<'*'<<i;
     }
     return 0;
    
    }
  • 相关阅读:
    Java编译器API简介
    liblinear和libsvm区别
    spark和hadoop比较
    maxout激活函数
    FTRL算法
    NLP里面好的学习资料
    阿里妈妈MLR模型(论文)
    FM的推导原理--推荐系统
    GBDT+LR simple例子
    深度学习最全优化方法---来源于知乎
  • 原文地址:https://www.cnblogs.com/-citywall123/p/10567028.html
Copyright © 2011-2022 走看看