zoukankan      html  css  js  c++  java
  • L1-006 连续因子 (20 分) 模拟

      

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

    输入格式:

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

    输出格式:

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

    输入样例:

    630
    

    输出样例:

    3
    5*6*7

    #include<bits/stdc++.h>
    using namespace std;
    //input by bxd
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);i--)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m)
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define LL long long
    #define pb push_back
    #define fi first
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    ///////////////////////////////////
    #define inf 0x3f3f3f3f
    #define N 50010
    
    int main()
    {
        ll n;
        cin>>n;
        ll prd=0;
        int start=0,len=0;
        for(int i=2;i<=sqrt(n);i++)
        {
            prd=1;
            for(int j=i;prd*j<=n;j++)
            {
                prd*=j;
                if(n%prd==0&&j-i+1>len)
                {
                    start=i;
                    len=j-i+1;
                }
            }
        }
        if(start==0)//若起始因子为0,说明N为质数,因为质数=1*本身,而循环最多能表示1*本身的根号 
        {
            start=n;
            len=1;
        }
        cout<<len<<'
    '<<start;
        for(int i=start+1;i<start+len;i++)
        cout<<'*'<<i;
        return 0;
    }
    View Code


  • 相关阅读:
    Best Time to Buy and Sell Stock
    Remove Nth Node From End of List
    Unique Paths
    Swap Nodes in Pairs
    Convert Sorted Array to Binary Search Tree
    Populating Next Right Pointers in Each Node
    Maximum Subarray
    Climbing Stairs
    Unique Binary Search Trees
    Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/bxd123/p/10617879.html
Copyright © 2011-2022 走看看